2011-05-30 17 views
0

我是rails新手,遇到範圍問題。我有兩個課程,Post和Story。 Post的每個實例都是使用Story show頁面上的表單中的數據創建的。 Post的其中一個參數是創建它的Story實例的標識。我不知道如何得到這個ID。即使我在def show下將其定義爲@story=Story.find(params[:id])Rails中的作用域問題

謝謝!

+0

如果沒有找到記錄,Story.find()應該引發一個ActiveRecord :: RecordNotFound。由於這不是什麼似乎正在發生的事情,你應該在你的問題中指定你正在嘗試做什麼。 – 2011-05-30 09:18:24

+0

你能發佈更多的代碼嗎? – rubyprince 2011-05-30 09:32:11

回答

0

這實際上取決於您創建帖子的位置以及控制器的路由。我希望這是在一個PostsController,而不是StoriesController - 因爲它不屬於後者。

所以,你使用PostsController,最好的辦法(因爲每一個崗位被綁定到一個故事,聽起來)假設,是嵌套在routes.rb文件的故事在這個控制器:

resources :stories do 
    resources :posts 
end 

然後,故事ID(給出的形式設置正確)是params[:story_id]可用 - 和創造可能是這個樣子:

story = Story.find params[:story_id] 
post = story.posts.create params[:post] 

在這裏工作過的幾個假設,但希望這是有幫助的。

+0

這正是我正在尋找的,謝謝。我懷疑嵌套的資源會做到這一點,但現在我得到了'無路由匹配{:action =>「create」,:controller =>「posts」}''。這指向了我的表單的這一行:'<%= form_for(@post)do | f | %>'。我現在應該如何申報?我確實使用了正確的控制器。 – Rymo4 2011-05-30 16:46:35

+0

您將希望表單知道嵌套:'<%= form_for([@ story,@post])do | f | %>' – pat 2011-05-30 17:26:47

+0

完美。我認爲我必須做類似的事情,但對語法不太確定。非常感謝你,現在一切正常。 – Rymo4 2011-05-30 19:27:27