2017-02-12 28 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' –