所以,我有一个搜索栏,以便用户(adam)可以搜索其他用户(bob)
我希望“添加关系”按钮链接到页面:'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
答案 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。我没试过它。