0

我想知道你是否能帮忙。首先,我的观点如下:

   <%= form_tag all_path, :method => 'get' do %>
        <%= hidden_field_tag :direction, params[:direction] %>
        <%= hidden_field_tag :sort, params[:sort] %>
        <p>
            Search: 
            <%= text_field_tag :search %>
            by 
            <%= select_tag :search_column, options_for_select(MyTable.translated_searchable_columns(['col1', 'col2']), params[:search_column]) %>
            <%= submit_tag 'Search' %>
        </p>
    <% end %>

我对许多其他视图使用相同的代码,因为它们是相似的页面。我正在尝试使这个干燥。改变的值是"MyTable", "col1", "col2"

其他一切都保持不变。我不明白的是如何在辅助方法中执行此操作,我尝试仅复制和粘贴并将这些值作为参数传递,但这不起作用,因为辅助方法是 ruby​​ 代码?不是html。我将如何在 application_helper.rb 中创建它?我是构建一个回传的字符串还是有其他方式,因为我也在使用 MyTable,这部分让我最困惑。

4

1 回答 1

3

您的建议是将整个视图文件保留为部分文件。而不是 MyTable,col1 和 col2 使用一些变量。您可以使用来自控制器的这些变量的不同值来渲染此部分。

您所要做的就是使用带有参数的 render_partial 作为这三个变量。

创建一个 partial.(mypartial) 如下所示

 <%= form_tag all_path, :method => 'get' do %>
        <%= hidden_field_tag :direction, params[:direction] %>
        <%= hidden_field_tag :sort, params[:sort] %>
        <p>
            Search: 
            <%= text_field_tag :search %>
            by 
            <%= select_tag :search_column, options_for_select(my_table.constantize.translated_searchable_columns([col1, col2]), params[:search_column]) %>
            <%= submit_tag 'Search' %>
        </p>
 <% end %>

现在你在哪里调用这个使用渲染部分并传递三个参数 col1 col2 和 my_table。它看起来像:

render :partial => 'mypartial', :locals => {:my_table => "ModelName", :col1 => 'col1', :col2 => 'col2'} 

通过这种方式,您可以动态发送模型名称和 col 变量。顺便说一句,只是好奇,这是以前定义的方法吗?询问是因为使用了 params 哈希。您可能也必须在 :locals 中发送这些参数哈希。

于 2013-08-20T17:24:15.300 回答