对于上帝的爱,这不起作用:
def index
@events = Event.all
@events.map { |e| e[:user_subscribed] = '55555' }
@events.each do |e|
puts e.name
puts e[:user_subscribed] # nil !
end
end
我尝试了e[:user_subscribed]
和e.user_subscribed
,但它无效。
如何向@events添加属性(我不需要保存它们)?
更新:我基本上从数据库中获取事件,并在将它们发送到视图之前添加基于current_user的属性。下一行代码是:
respond_to do |format|
format.html # index.html.erb
end
答案 0 :(得分:2)
如果user_subscribed
是Event
模型的虚拟属性,则应使用常规setter / getter而不是array setter / getter设置/获取它。
def index
@events = Event.all
@events.each { |e| e.user_subscribed = '55555' }
@events.each do |e|
puts e.name
puts e.user_subscribed
end
end
答案 1 :(得分:1)
修改后需要保存事件:
@events = Event.all.each do |e|
e.user_subscribed = '55555'
e.save!
end
编辑:一般来说,大多数逻辑应尽可能放在模型中(Fat Model, Skinny Controller)。所以你应该做这样的事情:
class Event < ActiveRecord::Base
def something_based_on_the_current_user(user)
#some logic here
end
end
在视图(或控制器)中调用它,如下所示:
@event.something_based_on_current_user(@user)