Rails:为什么我会得到如此奇怪的参数哈希?

问题描述

我有一个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哈希用于将用户输入分组。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...