HABTM与强参数的关联不会在Rails 4中保存用户

时间:2014-07-18 08:15:10

标签: ruby-on-rails-4 strong-parameters has-and-belongs-to-many

用户模型:

has_and_belongs_to_many :events

活动模式:

has_and_belongs_to_many :users

用户控制器:

params.require(:user).permit(:role, {:event_ids => []})

事件控制器:

params.require(:event).permit(:subject, :location, :date, :time, :all_day, :reminder, :notes, {:users_ids => []})

我的表格:

<%= simple_form_for(@event) do |f| %>
    <%= f.input :subject %>
    <%= f.input :location %>
    <%= f.input :date %>
    <%= f.input :time %>
    <%= f.association :users %>
    <%= f.input :all_day %>
    <%= f.input :reminder %>
    <%= f.input :notes %>

    <%= f.button :submit, :class =>"btn btn-default" %>
<% end %>

我希望能够从列表中选择用户并将该用户保存到数据库中。但是当我尝试创建一个新事件时,我在控制台中收到以下消息:

Unpermitted parameters: user_ids

我的设置是否不正确?我没有将正确的实例变量传递给表单吗?

4 个答案:

答案 0 :(得分:6)

呃...详细信息!

以前如何:

params.require(:event).permit(:subject, :location, :date, :time, :all_day, :reminder, :notes, {:users_ids => []})

应该如何:

params.require(:event).permit(:subject, :location, :date, :time, :all_day, :reminder, :notes, {:user_ids => []})

请注意:users_ids实际上应该是:user_ids!

答案 1 :(得分:5)

或者你可以简单地使用这样的简写语法。

params.require(:event).permit(:subject, :location, :date, :time, :all_day, :reminder, :notes, user_ids: [])

注意:user_ids: []代替{:user_ids => []}

答案 2 :(得分:1)

simple_form的属性: user_ids

#permit中的符号: users_ids

你已经添加了一个s,删除它,你应该尽我所能去。

答案 3 :(得分:1)

在我的情况下,我之前安装了Rails 3。我升级到Rails 4.选择刚刚传递一个字符串,而不是一个关联。因此,提出的语法不起作用。我只需要允许user_ids。即:

params.require(:event).permit(:subject, :location, :date, :time, :all_day, :reminder, :notes, :user_ids)

似乎Rails 4改变了行为。