问题描述
我有一个Article
模型,该模型具有tags
及其后的edit.html.erb
/app/models/article.rb
class Article < ApplicationRecord
include Taggable
has_many :child_articles,class_name: "Article",foreign_key: "parent_article_id"
belongs_to :parent_article,optional: true
accepts_nested_attributes_for :tags
end
/app/views/articles/edit_form.html.erb
<title>_edit_form.html.erb</title>
_edit_form.html.erb
<%= form_with(model: @article,local: true,method: :patch,url: article_path) do |article| %>
<% if @article.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(article.errors.count,"error") %> prohibited
this article from being saved:
</h2>
<ul>
<% @article.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<%= article.hidden_field :parent_article_id,value: @article.parent_article_id %>
<p>
<%= article.label :title %><br>
<%= article.text_field :title,value: "#{@article.title}" %>
</p>
<p>
<%= article.label :text %><br>
<%= article.text_area :text,value: "#{@article.text}",size: 200 %>
</p>
<p>
<div style="font-weight: bold;">tags</div>
<%= article.fields_for :tags do |article_tags| %>
<%= article_tags.text_field :name,value: "#{@article.tags.map(&:name).join(",")}" %>
<% end %>
</div>
</p>
<p>
<%= article.submit %>
</p>
<% end %>
我将在示例哈希中进行更新:
>>
params
=> <ActionController::Parameters {"utf8"=>"✓","_method"=>"patch","authenticity_token"=>"NK/5QEf/723CfgznpMCWT0/itHUj68gz5GmzD+nDzaLM6NILLex7/Co809QILxRUgegCwOppr/S8PN8vK3Avfw==","article"=>{"parent_article_id"=>"","title"=>"Überschrift","text"=>"Toller Text","tags_attributes"=>{"0"=>{"name"=>"Rails,Ruby"}}},"commit"=>"Update Article","controller"=>"articles","action"=>"update","id"=>"1"} permitted: false>
为什么是
"controller"=>"articles","id"=>"1"
是在"article"
键之外?显然属于文章信息。
您真诚的
von Spotz
解决方法
这3个参数来自路由器(您可能在其中有一个resources :articles
条目,如果您检查路由rails routes
,则会看到路由模板有一个:id
段)。
params[:article]
来自输入字段:如果检查输入元素,您会发现name
属性是article[title]
,article[text]
等。仅注意您由于输入的名称,在此处有一个article
哈希。
也许您以不同的方式考虑了这一点,但是对我而言,将它们与article
键分开是有意义的,因为它们具有不同的用途:前3个用于查找控制器,操作和一篇文章,article
哈希用于将用户输入分组。