在Rails中使用改造gem,如何填充has_many:通过嵌套模型

时间:2016-04-27 20:52:52

标签: ruby-on-rails has-many-through reform

我有一个用户模型和角色模型,通过以下方式在ActiveRecord中连接:

has_many roles, through: :role_accounts

我希望有一个"编辑用户"屏幕上有一个复选框列表,每个角色一个。使用Reform gem(v2.1.0),这是表单对象的片段:

class UserForm < Reform::Form
  property :name
  collection :roles do
    property :id
  end
end

我的问题是,当提交编辑表单并检查2个角色时,params哈希看起来像:{"user=>{"name"=>"Joe","roles"=>["2","5",""]}},我收到此错误:

[Reform] Your :populator did not return a Reform::Form instance for `roles`.

如何为has_many设置populator?

此外,我认为我首先需要删除所有用户的角色,然后添加所选的角色,这样他们最终只能使用当前的一组角色。我怎么能用改革宝石做到这一点?

1 个答案:

答案 0 :(得分:0)

由于改革不知道您要扮演什么角色,因此告诉它角色是什么模型。 这是指南中的示例:

collection :songs,
  populator: ->(fragment:, **) {
    # find out if incoming song is already added.
    item = songs.find { |song| song.id == fragment["id"].to_i }

    item ? item : songs.append(Song.new)
  }