【发布时间】:2014-12-01 06:47:52
【问题描述】:
Notes 和 Stacks 之间存在多对多关系。我正在创建一个表单,用户可以在其中创建一个新注释,带有标题、正文和一组复选框。复选框组是各种堆栈。我希望用户能够将一个或多个堆栈与特定笔记相关联。
我正在使用simple_form gem 来执行此操作。一切正常除了堆栈不会保存到数据库。标题和正文保存,但不是堆栈。我已经在控制台中手动测试了关系的双方,他们确实产生了预期的结果——它有效。
当我看到 Rails 服务器选项卡中发生的事情时,我注意到的一件事是 Unpermitted parameters: stack_ids,如下所示:
Started POST "/notes" for 127.0.0.1 at 2014-10-06 16:00:21 -0600
Processing by NotesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"gMpbaYio0qkPLLrR6ICG0IJ7XNoy3Rn4RHLm3vwUU+I=", "note"=>{"title"=>"asdfs ", "body"=>"asdfasdf asfsadf ", "stack_ids"=>["1", "2", ""]}, "commit"=>"Create Note"}
Unpermitted parameters: stack_ids
我的notes_controller.rb 有这些参数:
def notes_params
params.require(:note).permit(:title, :body, :stack_id)
end
我的stacks_controller.rb 有这些参数:
def stacks_params
params.require(:stack).permit(:title, :description, :note_id)
end
这是表格:
<%= simple_form_for @note, :html => { :class => 'form-horizontal' } do |f| %>
<%= f.input :title, placeholder: ":title", id: "note-form-title-field", class: "note-form-fields" %>
<%= f.input :body, placeholder: ":body", id: "note-form-body-field", class: "note-form-fields" %>
<%= f.association :stacks, as: :check_boxes %>
<%= f.button :submit %>
<% end %>
我尝试将参数中的:stack_id 替换为其他变体,并且始终得到相同的结果。关于如何让这些 Stacks 保存到数据库并与笔记相关联的任何想法?谢谢。
【问题讨论】:
-
rails 版本? 3 有
attr_accessible,4 有strong_params。另外,请检查我的格式编辑 =) -
.permit... 呵呵。 rails 4. 尝试允许堆栈,而不是 stack_id。 -
谢谢。 4.1 版。尝试了
:stack、:stacks和其他变体。结果相同。 -
你的表单是什么样子的?
-
尝试允许这样的 stack_ids:
params.require(:note).permit(:title, :body, :stack_ids => [])。这是允许 id 列表的常用方法。
标签: ruby-on-rails forms