2010-10-10 76 views
1

在控制器中,我想這樣做:如何將Ruby哈希鍵和值傳遞給Rails FormHelper函數?

@options = { :obj_id => @obj.id, :obj2_id => @obj2.id } 

並在視圖:

<%= 
remote_form_for(:model_object, :url => { :action => 'some_action' }) do |f| 
    @options.each { |k, v| 
     f.hidden_field(k, { :value => v }) 
    } 
} 
%> 

上述目前將只輸出每個鍵/值,而不是一個的字符串值的代碼隱藏的輸入字段。

我的經驗告訴我我錯過了一些簡單的東西......我錯過了什麼?

感謝您的幫助。

+0

是你@options的哈希鍵對應的model_object屬性?如果沒有,你可以使用hidden_​​tag而不是f.hidden。 – Yannis 2010-10-10 19:24:44

+0

它們確實對應於model_object屬性。 – pglombardo 2010-10-10 19:27:27

回答

2

你並不需要使用send這是因爲hidden_field不是私人方法,您所調用的方法也不是動態的。這些是您應該使用send的唯一兩個原因。

相反,讓您的形式使用更多ERB標籤:

<%= remote_form_for(:model_object, :url => { :action => 'some_action' }) do |f| %> 
    <% @options.each do |k, v| %> 
    <%= f.hidden_field(k, { :value => v }) %> 
    <% end %> 
<% end %> 
0

當我發佈了這個問題並且更徹底地思考了一下(並且有一些運氣)之後,我發現了object.send函數。下面的代碼解決了我的問題:

在控制器:

@options = { :obj_id => @obj.id, :obj2_id => @obj2.id } 

在視圖:

<% remote_form_for(:model_object, :url => { :action => 'some_action' }) do |f| %> 
     <% @options.each { |k, v| %> 
     <%= f.send :hidden_field, k, { :value => v } %> 
     <% } %> 
} 
%>