Activerecord对虚拟属性的质量分配

时间:2011-02-17 17:17:55

标签: ruby-on-rails ruby activerecord

我发布了以下数据:

{"commit"=>"Create", "conversation"=>{... , "watchers_ids"=>["2", "3", "4", "5", ...]}}

执行以下操作

def create
  @conversation = @current_project.conversations.new(params[:conversation]) 
  ...
end

以下课程

class Conversation < RoleRecord
  include Watchable
end

使用此模块


module Watchable
  def self.included(model)
    model.attr_accessible :watchers_ids
  end

  def watchers_ids=(ids)
    add_watchers( ids )
  end

  def watchers_ids
    ...
  end


  ...
end

但是,质量赋值不适用于虚拟属性。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

那里缺少代码...

如果您有has_and_belongs_to_many :watchers,则无需执行此自定义模块即可分配watcher_ids

然后,如果您不能这样做,那么该属性受模型中某些attr_protected或更可能attr_accessible调用的保护。您可以手动设置:

@conversation.watcher_ids = params[:conversation][:watcher_ids]