我是rails新手,遇到範圍問題。我有兩個課程,Post和Story。 Post的每個實例都是使用Story show頁面上的表單中的數據創建的。 Post的其中一個參數是創建它的Story實例的標識。我不知道如何得到這個ID。即使我在def show
下將其定義爲@story=Story.find(params[:id])
Rails中的作用域問題
謝謝!
我是rails新手,遇到範圍問題。我有兩個課程,Post和Story。 Post的每個實例都是使用Story show頁面上的表單中的數據創建的。 Post的其中一個參數是創建它的Story實例的標識。我不知道如何得到這個ID。即使我在def show
下將其定義爲@story=Story.find(params[:id])
Rails中的作用域問題
謝謝!
這實際上取決於您創建帖子的位置以及控制器的路由。我希望這是在一個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]
在這裏工作過的幾個假設,但希望這是有幫助的。
這正是我正在尋找的,謝謝。我懷疑嵌套的資源會做到這一點,但現在我得到了'無路由匹配{:action =>「create」,:controller =>「posts」}''。這指向了我的表單的這一行:'<%= form_for(@post)do | f | %>'。我現在應該如何申報?我確實使用了正確的控制器。 – Rymo4 2011-05-30 16:46:35
您將希望表單知道嵌套:'<%= form_for([@ story,@post])do | f | %>' – pat 2011-05-30 17:26:47
完美。我認爲我必須做類似的事情,但對語法不太確定。非常感謝你,現在一切正常。 – Rymo4 2011-05-30 19:27:27
如果沒有找到記錄,Story.find()應該引發一個ActiveRecord :: RecordNotFound。由於這不是什麼似乎正在發生的事情,你應該在你的問題中指定你正在嘗試做什麼。 – 2011-05-30 09:18:24
你能發佈更多的代碼嗎? – rubyprince 2011-05-30 09:32:11