Ruby on rails 链接和参数
我正在尝试让一系列的链接工作。有些是可折叠的,有些不是 基本上,在一个页面上重新加载我的params散列已经有两个键,它不应该有,我看不到它们被添加到哪里 我的链接:Ruby on rails 链接和参数,ruby-on-rails,ruby,hash,parameters,hyperlink,Ruby On Rails,Ruby,Hash,Parameters,Hyperlink,我正在尝试让一系列的链接工作。有些是可折叠的,有些不是 基本上,在一个页面上重新加载我的params散列已经有两个键,它不应该有,我看不到它们被添加到哪里 我的链接: <ul class="all filter__group"> <li><%= link_to "View all", coasters_path(page: 1), remote: true %></li> </ul> <ul class="types fil
<ul class="all filter__group">
<li><%= link_to "View all", coasters_path(page: 1), remote: true %></li>
</ul>
<ul class="types filter__group">
<%= content_tag(:li, class: ("active" if params[:type] == "steel")) do %>
<%= link_to "Steel", coasters_path(type_parameters("steel", page: 1)), remote: true %>
<% end %>
<%= content_tag(:li, class: ("active" if params[:type] == "wood")) do %>
<%= link_to "Wood", coasters_path(type_parameters("wood", page: 1)), remote: true %>
<% end %>
<%= content_tag(:li, class: ("active" if params[:type] == "powered")) do %>
<%= link_to "Powered", coasters_path(type_parameters("powered", page: 1)), remote: true %>
<% end %>
</ul>
<ul class="letters filter__group">
<%= content_tag(:li, class: ("active" if params[:letters] == "#")) do %>
<%= link_to "#", coasters_path(letter_parameters("#", page: 1)), remote: true %>
<% end %>
<%= content_tag(:li, class: ("active" if params[:letters] == "a-e")) do %>
<%= link_to "A-E", coasters_path(letter_parameters("a-e", page: 1)), remote: true %>
<% end %>
<%= content_tag(:li, class: ("active" if params[:letters] == "f-j")) do %>
<%= link_to "F-J", coasters_path(letter_parameters("f-j", page: 1)), remote: true %>
<% end %>
<%= content_tag(:li, class: ("active" if params[:letters] == "k-o")) do %>
<%= link_to "K-O", coasters_path(letter_parameters("k-o", page: 1)), remote: true %>
<% end %>
<%= content_tag(:li, class: ("active" if params[:letters] == "p-t")) do %>
<%= link_to "P-T", coasters_path(letter_parameters("p-t", page: 1)), remote: true %>
<% end %>
<%= content_tag(:li, class: ("active" if params[:letters] == "u-z")) do %>
<%= link_to "U-Z", coasters_path(letter_parameters("u-z", page: 1)), remote: true %>
<% end %>
</ul>
<%= debug params %>
在页面重新加载上,这是当前参数哈希:
--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
action: index
controller: coasters
type: powered
page: 1
letters: u-z
你知道我哪里出错了吗?当你使用merge时,你正在覆盖helpers中的params散列!您正在覆盖原始参数哈希 这应该起作用:
# Add the letters parameter to URL if not already there and remove if they are
def letter_parameters(letters, options = {})
parameters = params.dup
if params[:letters] == letters
# Remove letters
parameters.delete(:letters)
else
# Add letters to new parameters variable
parameters.merge!(letters: letters)
end
# Merge any parameters passed in via options
parameters.merge(options)
end
注意使用dup创建参数散列的新副本能否向我们展示控制器操作?控制器操作:您确定没有重新加载包含字母=u-z的URL?肯定。我刚刚试着从一个新标签访问它。从头开始重新键入URL,甚至从头开始在不同的浏览器中键入。但是在哪里。据我所见,我正在创建一个新的parameters变量,该变量最终作为一个散列,其中包含单击链接时用作该链接参数的项?这不对吗?我已经添加了一个解释和一些代码,应该会更清楚:
# Add the letters parameter to URL if not already there and remove if they are
def letter_parameters(letters, options = {})
parameters = params.dup
if params[:letters] == letters
# Remove letters
parameters.delete(:letters)
else
# Add letters to new parameters variable
parameters.merge!(letters: letters)
end
# Merge any parameters passed in via options
parameters.merge(options)
end