所以我想在他/她的个人资料页面中显示用户的帖子,作为最高用户详细信息,在所有帖子下方。
我知道我可以通过 http://localhost:3000/posts?category=article
等网址获取参数带
UITableView
但是当我有一个像 http://localhost:3000/user/adem-balka
这样的网址时,param无法正常工作那么,如何获取用户名以查找其ID并使用该用户ID提取帖子?
谢谢大家。
答案 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
路径参数(适用于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
答案 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)