为什么我将参数值作为 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 %>
其中 post
是 Post.new
而 :post
是 Post
的列。
由于我的创建方法没有按预期保存值,我只是在 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' 这会更清楚。
我的simple_form代码
<%= simple_form_for @post do |f| %>
<%= f.input :post,:as => :text %>
<%= f.button :submit %>
<% end %>
其中 post
是 Post.new
而 :post
是 Post
的列。
由于我的创建方法没有按预期保存值,我只是在 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' 这会更清楚。