Rails:复选框与隐藏字段的多对多关系

时间:2015-03-01 23:23:11

标签: ruby-on-rails ruby checkbox many-to-many

我正在构建一个允许用户设置一系列首选项选项的应用程序(web / iOS)。所需的模型/表格包括:

  • 用户:存储用户名,密码,电子邮件地址
  • Prefs:存储可用首选项的名称/类别,即“sex”
  • PrefOpts:存储每个偏好的选项,即“男性”和“女性”的性别
  • UserPrefs:为每个Pref
  • 为每个用户存储选定的PrefOpt

型号规格:

class User < ActiveRecord::Base
  has_many :user_prefs
  has_many :prefopts, through: :user_prefs

end

class Pref < ActiveRecord::Base
  has_many :prefopts
  has_many :user_prefs

  accepts_nested_attributes_for :prefopts

  validates :name, presence: true
end

class Prefopt < ActiveRecord::Base
  belongs_to :pref
  has_many :user_prefs
  has_many :users, through: :user_prefs

  accepts_nested_attributes_for :user_prefs
end

class UserPref < ActiveRecord::Base
  belongs_to :user
  belongs_to :prefopt
end

现在,我想在用户“show”页面上设置用户的偏好/选项,所以当我拉出用户的记录时,我会看到所有偏好的列表,并且每个下拉列表都会显示每个选项的可用偏好。

我已更新用户控制器以查询首选项...

  # GET /users/1
  # GET /users/1.json
  def show
    @prefs = Pref.all
  end

另外,我在用户下添加了路径文件引用:

  resources :users do
    resources :prefs do
      get 'prefopts', on: :member
    end
  end

这很好用:在用户的“show”页面上,我可以在使用这种语法时看到所有可用的首选项:

<p>
  <H2>Preferences</H2>
  <ul>
    <% @prefs.each do |pref| %>
    <li><%= pref.name %></li>
      <ul>
      </ul>

    <% end %>
  </ul>
</p>

现在,我想创建一系列复选框,每个选项都有可用的选项。从其他例子来看,我把它放在一起:

<%= form_for(@user) do |f| %>
      <%= f.hidden_field :user_id, :value => @user.id %>
  <H2>Preferences</H2>
  <ul>
    <% @prefs.each do |pref| %>
    <li><%= pref.name %></li>
      <%= f.fields_for :user_prefs, @user.user_prefs.find_or_initialize_by(pref_id: pref.id) do |u| -%>
      <%= u.hidden_field :pref_id, pref.id %>
      <%= u.collection_check_boxes(:user_pref, :pref_opt_ids, pref.prefopts, :id, :name) %>
      <% end -%>

    <% end %>
  </ul>
</p>

我得到的错误与find_or_initialize_by一致,是:未定义方法`merge'为1:Fixnum

我非常感谢你能给我的任何帮助!

0 个答案:

没有答案