2017-02-12 27 views
0

在我的帖子控制器,现在我发现通过USER_ID和POST_ID职位和它的作品完美的罚款导轨 - 通过用户名和帖子ID查找

def find_post 
     @track = Track.find_by(user_id: params[:id], post_id: params[:post_id]) 
    end 

我正在寻找一种方式来找到邮局代替在USER_ID的,通过用户名 例如,如果它发现帖子是这样的:

/:user_id/:post_id 

喜欢的东西:

/:username/:post_id 

那么如何访问url中的用户名参数?还是有更好的过程呢?

+0

您可以创建一个名为find_post_by_user的函数,并在路由中创建另一个端点'/:username /:post_id',然后将该路由引用到新函数。 –

回答

1

Rails路由器将:placeholder s映射到params对象密钥。像

/:user_id/:slug 

地图user_idparams[:user_id]

/:username/:slug 

映射usernameparams[:username]。因此,您可以通过params对象访问提供的用户名。并调用DB像

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

你不能直接从username找到职位,因为你没有的信息,其用户名没有这个专属于。您只有user_id作为foreign_key而不是username

+0

更改为'user.posts.find_by_slug' –