я определила несколько виртуальных атрибутов, определяющих как сеттер и методы геттеры:Определение виртуального атрибута в Rails и сделать его доступным как символ
class Post < ActiveRecord::Base
def shared_to_all
# evaluates some expression of the attribute privacy
end
def shared_to_friends
# evaluates some other expression of the attribute privacy
end
def shared_to_all=(bool)
# write_attribute(:privacy, ...)
end
def shared_to_friends=(bool)
# write_attribute(:privacy, ...)
end
end
до сих пор так хорошо, но я хочу Кроме того, чтобы сделать это виртуальные атрибуты доступны с помощью символов, так что я могу сделать что-то вроде @post= Post.first; @post[:shared_to_all]= true
[Edit:]
рубинового подход был бы переопределить []
и []=
операторов, как в:
def [](shared_to_all)
shared_to_all
end
def []=(shared_to_all, bool)
self.shared_to_all= (bool)
end
Но это, кажется, разорвать методы отношений Rails (привезенные на has_one
- has_many
- belongs_to
- has_and_belongs_to_many
директивы): например, Теперь Post.first.author => nil
и Author.first.posts => []
Почему не использовать 'attr_accessible'? Какая ошибка вы получаете? – hrr