因此,我有一个搜索栏,以便用户(Adam)可以搜索另一个用户(Bob)。
我有什么想法吗?/关系/新的?下面的id=bob‘变成'relationships/new/bob'?
**是在发送不同的参数或变量时,搜索返回'bob‘而不是’_id=bob‘的情况吗?
或者,是否可以发送搜索结果中搜索人员的名称,以便在按下“添加关系”按钮时将其链接到?
(其他相关信息,has_many和has_many通过关系都是正确设置的,所以用户has_many关系,to_params也是在用户模型中设置的,我不相信答案会与这些方面有任何关系)
users_controller:
def index
@users = User.search(params[:search])
@followed = User.find_by(name: params[:search])
# @followed = User.find_by_name(params[:id])
endusers/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发布于 2014-11-12 06:05:06
那么,您需要一个收集路径来完成这个任务(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的函数,它将
redirect_to search_users_path(params[:followed_id])
这也可以通过修改JavaScript来完成,但是有一个名为js-路线的gem,它可以帮助您完成这个任务,而无需路由和控制器的麻烦。
您似乎想使用用户名而不是惟一的东西,比如id或其他东西,但是这种方法有一个缺陷,如果有比同名的用户更多的用户怎么办。
这是您的代码通常应该是什么样子的要旨。不过我没试过。
https://stackoverflow.com/questions/26879332
复制相似问题