为什么我将参数值作为 simple_form 输入的散列值?

Why am I getting params value as an hash for simple_form input?

我的simple_form代码

<%= simple_form_for @post do |f| %>
  <%= f.input :post,:as => :text %>
  <%= f.button :submit %>
<% end %>

其中 postPost.new:postPost 的列。

由于我的创建方法没有按预期保存值,我只是在 create.html.erb 中打印了 :post 参数的值,输出为 {"post"=>"My sample post"}.

create.html.erb

@post = params[:post]

为什么 params[:post] 给出 {"post"=>"My sample post"} 而不是 My sample post

您期望的输出是错误的。输出正确。

因为在rails中参数结构如下:

params[:model_name][:attribute_name]

因此,如果您想打印预期结果,请尝试使用 params[:post][:post] 而不是 params[:post]

您有一个名为 post 的对象,您将其传递给 simple_form_for,因此它将该表单的内容包装在一个名为 post 的散列中。这允许 rails 区分是该表单内容的属性和不是该表单内容的属性。

例如,如果您添加了描述字段,params[:post] 将如下所示。

{:post => 'my title', :description => 'aaaa'}

我认为这可能有点令人困惑,因为您同时调用了模型和属性 'post'。也许如果您将该列重命名为 'contents' 这会更清楚。