Ruby on rails Rails中的范围问题
我是rails新手,在范围方面有问题。我有两门课,Post和Story。Post的每个实例都是使用Story show页面上表单中的数据创建的。Post的一个参数是创建它的故事实例的id。我不知道如何获取此id。@story为零,即使我在控制器中的Ruby on rails Rails中的范围问题,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我是rails新手,在范围方面有问题。我有两门课,Post和Story。Post的每个实例都是使用Story show页面上表单中的数据创建的。Post的一个参数是创建它的故事实例的id。我不知道如何获取此id。@story为零,即使我在控制器中的def show下将其定义为@story=story.find(params[:id]) 谢谢 这实际上取决于您在哪里创建帖子,以及控制器的路由。我希望这是一个PostsController,而不是StoriesController,因为它不属于后者
def show
下将其定义为@story=story.find(params[:id])
谢谢 这实际上取决于您在哪里创建帖子,以及控制器的路由。我希望这是一个PostsController,而不是StoriesController,因为它不属于后者 因此,假设您使用的是PostsController,最好的方法(假设每篇文章都与一个故事相关,听起来是这样),就是将此控制器嵌套在
routes.rb文件中的故事中:
resources :stories do
resources :posts
end
然后,在params[:story\u id]
中可以使用故事id(假定表单设置正确),并且创建可以如下所示:
story = Story.find params[:story_id]
post = story.posts.create params[:post]
在这里进行一些假设,但希望这会有所帮助。Story.find()应该在没有找到记录的情况下引发ActiveRecord::RecordNotFound。既然这似乎不是正在发生的事情,你应该在你的问题中具体说明你想做什么。这正是我想要的,谢谢。我怀疑嵌套的资源会起作用,但我现在发现没有路由匹配{:action=>“create”,:controller=>“posts”}
。这指向我表单的这一行:
。我现在该怎么申报呢?我确实使用了正确的控制器。您会希望表单知道嵌套:
完美。我想我必须做一些类似的事情,但不确定语法。非常感谢,现在一切都好了。