首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何获得一个url‘/relationships/new?下面的id=bob’来代替“relationships/new/bob”?

我如何获得一个url‘/relationships/new?下面的id=bob’来代替“relationships/new/bob”?
EN

Stack Overflow用户
提问于 2014-11-12 04:33:36
回答 1查看 37关注 0票数 0

因此,我有一个搜索栏,以便用户(Adam)可以搜索另一个用户(Bob)。

  • 搜索栏根据名称搜索用户。(搜索'bob‘返回'bob') (这发生在用户/index.html.erb上)
  • 一旦找到用户,他们的名字就会显示出来,搜索结果旁边会出现一个‘appears’按钮。(bob 'add relationship‘)(同样在用户/index.html.erb上弹出)
  • 我希望'add‘按钮链接到一个页面:’relationship/new/bob‘(relationship/new/friendname)
  • 目前,它链接到/relationships/new_id=bob

我有什么想法吗?/关系/新的?下面的id=bob‘变成'relationships/new/bob'?

**是在发送不同的参数或变量时,搜索返回'bob‘而不是’_id=bob‘的情况吗?

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

(其他相关信息,has_many和has_many通过关系都是正确设置的,所以用户has_many关系,to_params也是在用户模型中设置的,我不相信答案会与这些方面有任何关系)

users_controller:

代码语言:javascript
复制
  def index
    @users = User.search(params[:search])
    @followed = User.find_by(name: params[:search])
    # @followed = User.find_by_name(params[:id])
  end

users/index.html.erb:

代码语言:javascript
复制
<%= 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:

代码语言:javascript
复制
  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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-12 06:05:06

那么,您需要一个收集路径来完成这个任务(3个月前,当我开始rails时,我看到了一个类似的答案),然后进行了一个小小的黑客攻击:

代码语言:javascript
复制
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或其他东西,但是这种方法有一个缺陷,如果有比同名的用户更多的用户怎么办。

这是您的代码通常应该是什么样子的要旨。不过我没试过。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26879332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档