Ruby on rails Rails-按用户名和帖子id查找

Ruby on rails Rails-按用户名和帖子id查找,ruby-on-rails,Ruby On Rails,在我的帖子控制器中,现在我通过用户id和帖子id查找帖子,它工作得非常好 def find_post @track = Track.find_by(user_id: params[:id], post_id: params[:post_id]) end 我正在寻找一种方法,通过用户名查找帖子,而不是用户id 例如,如果它正在查找这样的帖子: /:user_id/:post_id 例如: /:username/:post_id 那么如何访问url中的usern

在我的帖子控制器中,现在我通过用户id和帖子id查找帖子,它工作得非常好

    def find_post
        @track = Track.find_by(user_id: params[:id], post_id: params[:post_id])
    end
我正在寻找一种方法,通过用户名查找帖子,而不是用户id 例如,如果它正在查找这样的帖子:

/:user_id/:post_id
例如:

/:username/:post_id
那么如何访问url中的username参数呢?或者有更好的方法吗?

Rails的路由器将:占位符映射到参数对象键。像

/:user_id/:slug
将用户标识映射到参数[:用户标识]

将用户名映射到参数[:username]。因此,您可以通过params对象访问提供的用户名。然后打DB电话,比如

user  = User.find_by_username(params[:username])
@post = user.posts.find(params[:post_id])

您无法直接从用户名中找到帖子,因为您没有该帖子属于哪个用户名的信息。您只有用户id作为外键,但没有用户名。

您可以创建一个名为“按用户查找帖子”的函数,并在路由中创建另一个端点/:用户名/:帖子id,然后将该路由引用到新函数。更改为user.posts.find\u by\u slug后,该函数开始工作
user  = User.find_by_username(params[:username])
@post = user.posts.find(params[:post_id])