2012-09-13 67 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爲你使用模型的形式傭工:)

相關問題