rails f.number_field vs number_field_tag

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rails f.number_field vs number_field_tag相关的知识,希望对你有一定的参考价值。

我正在处理这个表单,尝试填充我的值Hash并通过params将它发送到我的控制器:

<%= form_for(cash_count) do |f| %>
   ....
   <%= f.label "200 bills", :class => "input-group-addon" %>
   <%= number_field_tag "vals[b200]", :class => "form-control" %>

如果我理解正确,number_field_tag在params中发送字段结果对(工作正常),f.number_field在params.cash_count中发送字段结果对(不能使其工作)。

我不能用f.number_field做到这一点。

我尝试着

<%= f.number_field 'vals["b200"]', :class => "form-control" %>

我明白了

undefined method `vals["b200"]' for #<CashCount:0x007f371a756068> 

虽然在irb中这种语法似乎是正确的:

2.4.0 :028 > d = CashCount.new 

2.4.0 :029 > d.vals = c.vals

2.4.0 :031 > d.vals
 => {"b200"=>"3"} 

2.4.0 :033 > d.vals["b200"]
 => "3"   

澄清:我首先发布了这个问题,另一个名字是“vals”列 - “values”。我遇到了一些问题,因为它类似于Hash.values方法,所以我把它改为“vals”。

答案

您可以使用value参数预填充输入值

<%= f.number_field :my_attribute, value: f.object.values['b200'], class: '...' %>
另一答案

如果您真的想使用number_field而不是number_field_tag,这将有效。在内部,这些助手的实现略有不同

<%= form_for(cash_count) do |f| %>
    ....
    <%= f.label "200 bills", :class => "input-group-addon" %>
    <%= f.fields_for :values do |n|%>
        <%= n.number_field :b200 , :class => "form-control" %>
    <% end %>
<% end %>

它给出了类似的输出

"cash_count" => {"values" => {"b200" => "3"}}

以上是关于rails f.number_field vs number_field_tag的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails Mountable vs. Full Engine

在AWS上使用Capistrano的Rails secrets.yml VS Dotenv VS Figaro

Choosing web framework: ASP.NET MVC vs Django Python vs Ruby on Rails(转载)

在 Rails 4 中用于 JSON 处理的 jbuilder vs rails-api/active_model_serializers

Rails content_tag vs tag

rackspace vs EC2 vs Heroku vs Engine Yard for ruby​​ on rails [关闭]