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

類似したページであるため、他のビューの数にも同じコードを使用しています。私はこれをDRYにしようとしています。変化する値は、"MyTable", "col1", "col2"

他のすべては同じままです。私が理解していないのは、ヘルパーメソッドでこれを行う方法です。これらの値をコピーして貼り付けてパラメーターとして渡してみましたが、ヘルパーはルビーコードであるため機能しませんか? html ではありません。application_helper.rb でこれを作成するにはどうすればよいですか? 私は MyTable も使用しているため、返される文字列を作成しますか、それとも別の方法がありますか?この部分は私を最も混乱させます。

4

1 に答える 1

3

このビュー ファイル全体を部分ファイルとして保持することをお勧めします。MyTable の代わりに、col1 と col2 はいくつかの変数を使用します。コントローラーからのこれらの変数のさまざまな値を使用して、このパーシャルをレンダリングできます。

これら 3 つの変数としてパラメーターを指定して 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 %>

これを呼び出す場所はどこでも、部分レンダリングを使用し、3 つのパラメーター col1 col2 および my_table を渡します。次のようになります。

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

そうすれば、モデル名と col 変数を動的に送信できます。ところで、ちょっと興味がありますが、これは以前にメソッドとして定義されていましたか?? params ハッシュを使用しているためです。:locals でもこれらの params ハッシュを送信する必要がある場合があります。

于 2013-08-20T17:24:15.300 に答える