Как написать собственный макрос типа attr_accessible - PullRequest
0 голосов
/ 10 марта 2011

Я не уверен, является ли macro даже правильным термином.По сути, я хочу иметь возможность легко настраивать столбцы ActiveRecord (используя знакомый синтаксис AR), чтобы before_save они всегда форматировались определенным образом, вызывая метод экземпляра.

Я бы хотел сделать все это доступным из миксина.

Например:

class MyClass < ActiveRecord::Base

  happy_columns :col1, :col2  # I really want this type of convenient syntax


  # dynamically created stuff below from a mixin.
  before_save :make_col1_happy
  before_save :make_col2_happy

  def make_col1_happy; self.col1 += " is happy"; end
  def make_col2_happy; self.col2 += " is happy"; end

end

1 Ответ

0 голосов
/ 10 марта 2011

попробуйте расширить ActiveRecord, т.е.

#in lib/happy_columns.rb


module HappyColumns
  def happy_columns(cols)
    cols.each do |c|
     before_filter "make_#{c}_happy".to_sym

     #here you could define your instance methot using define_method
      define_method "make_#{c}_happy" do
        #your code
       end

     end



    include InstanceMethods
  end

  module InstanceMethods
   #here you could define other your instancemethod 


  end
end


ActiveRecord::Base.extend HappyColumns

убедитесь, что вы включили расширения в путь загрузки, тогда вы можете использовать happy_cols в вашей модели.

извините, если есть какая-то ошибка, для define_method посмотрите на это .

надеюсь, что это может помочь.

...