我怎么得到一个网址'/ relationships / new?followed_id = bob'而不是读'relationships / new / bob'?

时间:2014-11-12 04:33:37

标签: ruby-on-rails variables routes url-routing params

所以,我有一个搜索栏,以便用户(adam)可以搜索其他用户(bob)

  • 搜索栏根据名称搜索用户。 (搜索'bob'返回'bob')(这发生在users / index.html.erb上)
  • 找到用户后,会显示其名称,并在搜索结果旁边显示“添加关系”按钮。 (bob'添加关系')(再次弹出用户/ index.html.erb)
  • 我希望“添加关系”按钮链接到页面:'relationships / new / bob'(relationships / new / friendname)

  • 目前它链接到/ relationships / new?followed_id = bob

任何想法我如何得到'/ relations / new?followed_id = bob'成为'relations / new / bob'?

**这是一个发送不同的参数或变量的情况,所以搜索返回'bob'而不是'?followed_id = bob'?

或者,是否可以使用搜索结果发送正在搜索的人的名称参数,以便在按下时可以将其链接到“添加关系”按钮?

(其他相关信息,has_many和has_many通过关系都设置正确,因此用户has_many关系,to_params也在用户模型中设置,我不相信答案将与这些方面有任何关系)< / p>

users_controller:

  def index
    @users = User.search(params[:search])
    @followed = User.find_by(name: params[:search])
    # @followed = User.find_by_name(params[:id])
  end

用户/ index.html.erb:

<%= form_tag users_path, :method => 'get' do %>
    <p>
        <%= text_field_tag :search, params[:search] %>
        <%= submit_tag "Search", :name => nil %>
    </p>
<% end %>

<ul>
    <% @users.each do |user| %>
        <li>
            <%= user.name %>
            <%= link_to "Add Relationship", new_relationship_path(followed_id: @followed), class: "btn btn-primary" %>
            <%= @followed %>
        </li>
    <% end %>
</ul>

relationships_controller:

  def new
    if params[:followed_id]
      # @followed = User.find_by(name: params[:followed_id])
      # @followed = User.find(params[:followed_id])
      # @followed = User.find_by_name(params[:id])
      raise ActiveRecord::RecordNotFound if @followed.nil?
      @active_relationship = current_user.active_relationships.new(followed: @followed)
    else
      flash[:danger] = "Relationship required"
    end

  rescue ActiveRecord::RecordNotFound 
    render 'public/404', status: :not_found
  end

1 个答案:

答案 0 :(得分:2)

那么你需要一个收集路线来做到这一点(3个月前,当我开始使用rails时,我看到了这样的答案),还有一点点黑客攻击:

resources :users do
 collection do
   get :search, action: "search_user",  as: "search_user"
   get 'search/:followed_id', action: "search", as: "search"
 end
end

然后您可以在名为users_controller search_user的{​​{1}}中找到一个功能

redirect_to search_users_path(params[:followed_id])

这也可以通过修改window.href来完成,但是有一个可用的gem, js-routes,它可以帮助你,没有路线和控制器的麻烦。

您似乎想要使用用户名而不是像id之类的东西,但这种方法有一个缺陷,如果有多个用户具有相同的名称,那该怎么办。

这是您的代码通常应该是什么样的gist。我没试过它。