Rails ::如何在将模型发送到视图之前向模型添加属性

时间:2011-10-22 17:35:35

标签: ruby-on-rails mongoid

对于上帝的爱,这不起作用:

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

2 个答案:

答案 0 :(得分:2)

如果user_subscribedEvent模型的虚拟属性,则应使用常规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)