全部,为了动态地组成search.html.erb
视图,我们将每个字段的详细信息存储在表中,这些字段需要显示为散列或表示为字符串的散列。例如,为了显示status
字段,我们将相关的status
布局存储如下:
{:status => {:label => 'Status', :collection => return_misc_definitions('project_status') } }
然后我的search.html.erb有下面的伪代码
<%= simple_form_for @model, :method => :put, :url => @search_results_url do |f| %>
<%= @fields_details.each do |field, layouts| %>
<%= f.input field, eval(layouts) %>
<% end %>
<% end %>
目标是最终获得类似的东西
<%= f.input :status, :label => 'Status', :collection => return_misc_definitions('project_status') %>
我们正在使用"layout"的eval
函数,但由于eval试图评估函数return_misc_definitions
,因此这不起作用。我怎样才能逃脱这种评价?我们使用的是ruby 1.9.3
、rails 3.2.12
和simple_form
。感谢您的帮助
这对我有效:
<% @fields_details = {:status => {:label => 'Status', :collection => [1,2,3,4]} } %>
<%= simple_form_for :form, :method => :put, :url => @search_results_url do |f| %>
<% @fields_details.each do |field, layouts| %>
<%= f.input field, layouts %>
<% end %>
<% end %>
我删除了<%= @fields_details.each do |field, layouts| %>
中的=
,以防止@field_details
在屏幕上呈现,然后直接将字段和布局传递到Simple Form中,无需评估。