场景:用户(班级:User
)想要通过创建应用程序(班级Course
)在线申请课程(班级:Application
)。
他们访问/applications/:id
的应用程序页面,其中id是课程ID。这是控制器:
def new
@course = Course.find_by_id(params[:id])
@application = Application.new
end
def create
@application = Application.new(application_params)
@course = Course.find_by_id(params[:id])
@application.course_id = @course.id
@application.save
end
此行失败
@course = Course.find_by_id(params[:id])
因为在处理POST请求的方法中你无法访问参数,但我要求他们在应用程序上设置course_id。
答案 0 :(得分:2)
如果资源是嵌套的,new_whatever_path链接只会传递一个id。所以我认为你的路线应该是这样的:
resources :course do
resources :application, only: [:new, :create]
end
然后你可以做一个link_to“Apply:,new_course_application_path(@course)等等。
答案 1 :(得分:1)
如果你的路由嵌套并关联,你可以使用ActiveRecord方法,因为rails可以用更少的代码完成。
def create
@course = Course.find(params[:id]) #if its nested and associated then (params[:course_id])
@application = @course.applications.new(application_params)
@application.save
end