使用Rails 5从http:// localhost:3000 / user / adem-balka等友好URL获取参数

时间:2017-09-12 13:57:06

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

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

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

等网址获取参数

UITableView

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

这样的网址时,param无法正常工作

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

谢谢大家。

4 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:2)

您要查找的是路径参数,其中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路径参数(适用于showedit等)。但即使您更改控制器,生成的帮助程序(例如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

答案 2 :(得分:1)

# routes.rb
get '/users/:username' => 'users#posts'


# users_controller.rb
def posts
  username = params[:username]
  # etc..
end

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

答案 3 :(得分:0)

谢谢你的回答。我向他们学习了

这解决了我的问题

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