簡體   English   中英

在Rails 5中重構從視圖傳遞到控制器的參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM