2017-09-09 19 views
1

以下のコードが動作しているので、コントローラに "experience"パラメータを渡します。私の質問は、option1、option2などのパラメータを渡すより良い方法を見つけることを中心に動いています。私は多くのスコープを持っていて、filtered_jobs_pathが長くなるほどデータをフィルタリングするためにスコープを追加します。私はレールが比較的新しいので、これを行う唯一の方法ですが、他のフィルタオプション(option1、option2、etc ...)をどこかにリストして、それを呼び出す方法があるようです各リンク_toはマイルではないので、ビューは可能ですか?Railsのビューからコントローラへのリファクタリングのパラメータを渡します。

<div class="well"> 
    <%= link_to "0-2 years", filtered_jobs_path(experience: '0-2 years', option1: params[:option1], option2: params[:option2]) %><br /> 
    <%= link_to "2-5 years", filtered_jobs_path(experience: '2-5 years', option1: params[:option1], option2: params[:option2]) %><br /> 
    <%= link_to "5-10 years", filtered_jobs_path(experience: '5-10 years', option1: params[:option1], option2: params[:option2]) %><br /> 
    <%= link_to "10+ years", filtered_jobs_path(experience: '10+ years', option1: params[:option1], option2: params[:option2]) %>   
</div> 
+0

filtered_jobs_pathメソッドを追加できますか? –

+0

ヘルパーメソッドを使用している場合、 'params'はそこで利用できるはずですか?だからあなたは受け取ったパラメータをそこを渡すことなくそこに使うことができると思う –

答えて

0

これはあなたが探しているものですか?

# some_helper.rb 
def filtered_jobs_link(text) 
    link_to text, filtered_jobs_path(experience: text, option1: params[:option1], option2: params[:option2]) 
end 


#some_view.html.erb 
<div class="well"> 
    <%= filtered_jobs_link "0-2 years" %><br /> 
    <%= filtered_jobs_link "2-5 years" %><br /> 
    <%= filtered_jobs_link "5-10 years" %><br /> 
    <%= filtered_jobs_link "10+ years" %>   
</div> 
0

ヘルパーの作成:

module JobsHelper 
    def filtered_jobs_link(text, **opts) 
    opts.reverse_merge!(params.slice(:option1, :option2)) 
    link_to text, filtered_jobs_path(opts) 
    end 
end 

をし、オプションを反復処理:

<ul> 
    <% ["0-2 years", "2-5 years", "5-10 years", "10+ years"].each do |o|%> 
    <li><%= filtered_jobs_link(o, experience: o) %></li> 
    <% end %> 
</ul> 

あなたが本当にその固有のマークアップを使用する必要がある場合:

module JobsHelper 
    def filtered_jobs_link(text, **opts) 
    opts.reverse_merge!(params.slice(:option1, :option2)) 
    link_to text, filtered_jobs_path(opts) 
    end 

    def filtered_jobs_by_experience(*options) 
    options.map { |o| filtered_jobs_link(o, experience: o) }.join('</ br>') 
    end 
end 

<div class="well"> 
    <%= filtered_jobs_by_experience("0-2 years", "2-5 years", "5-10 years", "10+ years") %> 
</div> 
関連する問題