【问题标题】:Getting param from friendly url like http://localhost:3000/user/adem-balka with Rails 5使用 Rails 5 从友好的 URL 获取参数,例如 http://localhost:3000/user/adem-balka
【发布时间】:2018-02-21 00:48:45
【问题描述】:

所以我想在他/她的个人资料页面中显示用户的帖子,作为顶部用户详细信息,在所有帖子下方。

我知道我可以从 http://localhost:3000/posts?category=article

之类的网址获取参数

与

if params[:category]
  @category_id = Category.find_by(title: params[:category]).id
  @posts = Post.where(category_id: @category_id)
end

但是当我有一个像 http://localhost:3000/user/adem-balka

这样的网址时,参数不起作用

那么,我如何获取用户名以找到其 id 并使用该用户 id 提取帖子?

谢谢大家。

【问题讨论】:

标签: ruby-on-rails ruby url parameters ruby-on-rails-5


【解决方案1】:

url 中的参数名称在您的路由文件中设置。

如果您查看config/routes.rb 中的路线,您应该能够找到与用户模型对应的行。它应该看起来像这样:

get '/users/:name', to: 'users#show'

这意味着如果您转到 /users/adem-balka,params[:name] 将被设置为 'adem-balka'。然后就可以访问相应控制器函数中的参数了。

【讨论】:

    【解决方案2】:
    # routes.rb
    get '/users/:username' => 'users#posts'
    
    
    # users_controller.rb
    def posts
      username = params[:username]
      # etc..
    end
    

    这在Rails Docs 中被描述为路由参数。

    【讨论】:

      【解决方案3】:

      您要查找的是路径参数,其中adem-balka 就是params[:username]。

      假设您的参数中没有正斜杠或点,这就像在您的路线中添加 /:username 一样简单,例如

      get '/users/:username', to: 'users#show'
      
      
      # in the controller
      @user = User.find_by(username: params[:username])
      

      Rails Routing from the Outside In 指南中涵盖了所有内容。

      请注意,生成的路由resources 已经包含:id 路径参数(对于show、edit 等)。但是即使你改变了控制器,生成的助手(例如users_path(@user))也会使用这个id。

      要使其与resources 一起使用,使用username 而不是id(例如users_path(@user) 给出/users/ben 而不是/users/5),您还需要覆盖to_param 方法,例如

      class User < ApplicationRecord
        def to_param
          username #rather than id
        end
      end
      

      【讨论】:

        【解决方案4】:

        感谢您的回答。我向他们学习?

        这解决了我的问题

          @user_id = User.friendly.find(params[:id])
          @posts = Post.where(user_id: @user_id)
        

        【讨论】:

          猜你喜欢
          • 2019-07-07
          • 2021-03-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-01
          • 2011-12-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多