首先我可能会以错误的方式解决这个问题,所以我先给出一些背景知识。
从标题中可以看出,我正在从头开始构建一个论坛。我认为它工作正常;但是,我有点不确定如何在其控制器的主题“创建”方法中更新/保存论坛对象。
我试图做的事情: 在“新”方法中,我通过路由发送了论坛的ID。所以在新主题页面上有一个如下所示的地址:“localhost:3000 / new-topic / 1”。一个是论坛的ID。在方法本身中,我尝试将其附加到新主题对象。
@topic = Topic.new
@topic.forum = Forum.find(params[:id])
然后我的创建方法尝试使用该论坛。
@topic = Topic.new(params[:topic])
@topic.forum.topics << @topic #Simplified down.
if @topic.save
@topic.forum.save
...
我觉得我这样做是错误的。我正在查看某人的教程,他们通过调用params [:forum_id]来获得论坛,但是他们没有向他们展示他们为实现这一点而做的路由。
如何正确地执行此操作和/或正确的方法是什么?为了记录,我确实计划在Topic =&gt;中使用相同的方法。邮政协会。谢谢你的帮助。
答案 0 :(得分:1)
您应该使用嵌套的REST路由:
# routes.rb
resources :forums do
resources :topics
end
这将产生以下路线:
GET /forums/:forum_id/topics/new # displays the form
POST /forums/:forum_id/topics # creates the topic
并且在控制器中你应该使用构建器,它们有几个优点,如安全性,范围保留等:
def new
@forum = Forum.find(params[:forum_id])
@topic = @forum.topics.build
def create
@forum = Forum.find(params[:forum_id])
@topic = @forum.topics.build(params[:topic])
if @topic.save
...
http://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Resources.html#method-i-resources