【问题标题】:Cannot get a many-to-many item to save to the database when using a form使用表单时无法将多对多项目保存到数据库
【发布时间】: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 =&gt; [])。这是允许 id 列表的常用方法。

标签: ruby-on-rails forms


【解决方案1】:

这个StackOverflow posting 提供了详细的解决方案。

总之,在声明强参数时,我需要将stack_ids 键显式映射到我的notes_controller.rb 文件中的一个空数组:

def notes_params params.require(:note).permit(:title, :body, stack_ids: []) end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    相关资源
    最近更新 更多