2013-01-18 54 views
0

仔細檢查目前,我有這個在我的routes.rbRails 3的路線上比賽

match '/:username' => 'profiles#show', :as => :public_profile 

現在我想用這個格式,並添加另一個參數,使另一場比賽的另一條途徑。 我不知道如何解釋這個,但讓我給你一個例子。 上面那場比賽假設:

http://example.com/foo_username 

這個連接foo_username的輪廓。 現在我想有這樣的網址:

http://example.com/foo_username/5-my-story 

這個環節應該去的故事#show動作與5-MY-故事,因爲它的ID(塞),以及這個故事所提供的用戶名資在路徑中。如何在路由中配置? 我想這一個:

match '/:username/:id' => 'stories#show', :as => public_story 

它的工作原理,但是當我更改用戶名的參數,但它仍然去的故事。它應該返回未找到的路由,因爲用戶名不擁有該故事。

我該如何最好地執行此操作?

回答

0

在你的控制器,你就會有這樣的事情:

@story = Story.find(params[:id]) 

您需要限制可能給用戶的這樣的故事

@user = User.find_by_username(params[:username]) 
@story = @user.stories.find(params[:id]) 

然後你必須檢查是否@story如果不是,則返回404。

0

適應這個以滿足您的需求:

# stories_controller.rb 

def show 
    @story = Story.find(params[:id]) 
    raise ActiveRecord::RecordNotFound unless @story.user.name == params[:username] 
    # ... 
end