Ruby on rails 链接和参数

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

我正在尝试让一系列的链接工作。有些是可折叠的,有些不是

基本上,在一个页面上重新加载我的params散列已经有两个键,它不应该有,我看不到它们被添加到哪里

我的链接:

<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