2013-08-20 68 views
0

我想知道你是否能够帮忙。首先我有一个观点如下:Rails概括查看帮手

<%= 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"

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

+0

为什么不使用共享部分并将选项作为参数传递?类似于'<%= render'common_form',select_container:MyTable.translated_searchable_columns(['col1','col2'])%>'或'<%= render'common_form',select_source:MyTable,select_cols:['col1' ,'col2']%>'。使用助手将涉及使用'CaptureHelper#capture'或'@ template.concat'。 – akhanubis

回答

3

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

所有你需要做的就是使用render_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变量发送动态。 BTW只是好奇,这是定义为一种方法之前?因为使用了params散列问。您可能必须将这些参数散列在:本地人中。

+0

不幸的是,我完全困惑于你在说什么。有什么机会可以给我一个例子吗? – Bojan

+0

@Bagzli给我的答案增加了一个例子。 – AshwinKumarS