2010-10-10 77 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 } %> 
     <% } %> 
} 
%>