2012-09-13 44 views
3

现在我有一排RoR:为什么我得到未定义的方法'hidden_​​field_tag'?

<section> 
     <%= render 'shared/micropost_form_purchase' %> 
     <%= render 'shared/micropost_form_sale' %> 
     </section> 

然后_micropost_form_purchase.html.erb

<%= form_for(@micropost) do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 
    <div class="field no-indent"> 
    <%= f.text_area :content, placeholder: "What's something else you want to buy?" %> 
    <%= f.hidden_field_tag :type, :value => "purchase" %> 
    </div> 
    <%= f.submit "Post", class: "btn btn-large btn-primary" %> 
<% end %> 

两种形式和_micropost_form_sale.html.erb我有

<%= form_for(@micropost, :html => { :id => "sale" }) do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 
    <div class="field no-indent"> 
    <%= f.text_area :content, placeholder: "What's something else you want to buy?" %> 
    <%= f.hidden_field_tag :type, :value => "sale" %> 
    </div> 
    <%= f.submit "Post", class: "btn btn-large btn-primary" %> 
<% end %> 

所以我希望第一个微博自动成为购买微博(我在微博数据库中有一个名为type的字段,这是我想描述的字符串啤酒或购买),第二个我希望它成为一个销售微博。我使用的是hidden_​​field_tag,因为我认为你不必在控制器中定义它,但我错了吗?隐藏域更合适吗?我怎样才能使用hidden_​​field_tag?

回答

11

您可以使用:

<%= f.hidden_field :type, :value => "sale" %> 

或:

<%= hidden_field_tag 'micropost[type]', "sale" %> 

但不是:

<%= f.hidden_field_tag :type, :value => "sale" %> 

使用f.hidden_field将使用变量@micropost中的值,而hidden_field_tag将不会使用该值。

+0

好的谢谢。我注意到,当我创建这些microposts时,它并没有在数据库的类型列中记录任何内容。这是否意味着它没有工作,或者hidden_​​field_tag只是不写入数据库? – BigBoy1337

+0

我编辑了我的答案,以更好地解释hidden_​​field_tag的作用。您需要确保该字段的名称是最终成为保存到数据库的散列的一部分的名称。 – weexpectedTHIS

+0

然后它给了我错误:无法批量分配受保护的属性:类型。这个质量如何分配 – BigBoy1337

2

应该f.hidden_fieldf.hidden_field_tag为你使用模型的形式佣工:)

相关问题