如何解决Rails表单助手:一种形式的多个嵌套模型,例如“ Article.comments”?
这是嵌套的Article模型form_with
或Comment
的{{1}}视图帮助器,来自Rails“入门”指南(https://guides.rubyonrails.org/getting_started.html):
Article.comments
也
<p>
<strong>Title:</strong>
<%= @article.title %>
</p>
<p>
<strong>Text:</strong>
<%= @article.text %>
</p>
<h2>Add a comment:</h2>
<%= form_with(model: [ @article,@article.comments.build ],local: true) do |form| %>
<p>
<%= form.label :commenter %><br>
<%= form.text_field :commenter %>
</p>
<p>
<%= form.label :body %><br>
<%= form.text_area :body %>
</p>
<p>
<%= form.submit %>
</p>
<% end %>
<%= link_to 'Edit',edit_article_path(@article) %> |
<%= link_to 'Back',articles_path %>
和
class Article < ApplicationRecord
has_many :comments
validates :title,presence: true,length: { minimum: 5 }
end
现在,我想知道是否可以使用class Comment < ApplicationRecord
belongs_to :article
end
助手或其他助手或助手组合来创建或编辑带有多个嵌套模型的新Article,例如Comment,标签, ...以及文章可能组成的进一步模型。
...会创建合理且有用的params-Hash(因为我自己的解决方案带有“ fields_for”表单助手,因此不会产生所需或有用的params哈希。
这是params-hash的样子:
form_with
问题是控制器/商品ID未包含在<ActionController::Parameters {"utf8"=>"✓","_method"=>"patch","authenticity_token"=>"BeCtYS/U6lugXzzpltEBsMXAiD0x7z28iBUblHiza379p4YqRcd+ykgd49o53oOrC8o+iPhtWnvQQHe0ugCJow==","article"=>{"parent_article_id"=>"","title"=>"Überschrift","text"=>"Toller Text"},"tags"=>{"name"=>"Rails"},"commit"=>"Update Article","controller"=>"articles","action"=>"update","id"=>"1"} permitted: false>
键下。我不知道该如何解决strong_parameters,我什至不想。我希望Rails遵循最小惊讶原则运行,而不是通过黑客手段使事情正常运行。
在这种情况下,我希望是我自己的无知和对表单帮助者的了解,阻止了Rails生成适当的参数哈希。
谢谢。
解决方法
铁路应该按照您的预期进行。
来自accepts_nested_attributes
:
请考虑拥有多个帖子的成员:
class Member < ActiveRecord::Base has_many :posts accepts_nested_attributes_for :posts end
您现在可以通过成员的属性哈希值来设置或更新关联帖子的属性:包括键:posts_attributes并将帖子属性的哈希数组作为值。
对于每个没有id密钥的哈希,除非>哈希还包含一个评估为true的_destroy密钥,否则将实例化一条新记录。
params = { member: { name: 'joe',posts_attributes: [ { title: 'Kari,the awesome Ruby documentation browser!' },{ title: 'The egalitarian assumption of the modern citizen' },{ title: '',_destroy: '1' } # this will be ignored ] }} member = Member.create(params[:member]) member.posts.length # => 2 member.posts.first.title # => 'Kari,the awesome Ruby documentation browser!' member.posts.second.title # => 'The egalitarian assumption of the modern citizen'
您显示的 参数散列很奇怪。看来您是在手动建立parent_article_id
之类的断开连接的字段,而不是实际使用form_with
和fields_for
的功能。
我需要查看 视图和控制器代码,以了解如何实现form_with
和fields_for
来帮助您以所需的方式嵌套这些参数
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。