[英]Refactor passing params from a view to the controller in Rails 5
因此,以下代碼可以正常工作,它將“ experience”參數傳遞給我的控制器。 我的問題圍繞着找到一種更好的方式來傳遞參數option1,option2等...(如果存在)。 我有很多作用域,並且添加的作用域越多,過濾數據的時間就越長。 我是Rails的新手,所以也許這是唯一的方法,但是似乎應該有一種方法可以在某處列出所有其他過濾器選項(option1,option2等),然后在其中調用視圖,所以每個link_to都不長一英里,這可能嗎?
<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>
這是你想要的?
# 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>
創建一個助手:
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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.