rails 4中的嵌套资源和新表单

时间:2014-09-11 14:11:11

标签: ruby-on-rails ruby-on-rails-4

我有2个模型课程和类别

resources :categories do
  resources :courses
end

一个类别有很多课程,一个课程属于一个类别。

目前,用户可以点击某个类别,查看该类别的所有课程,这就是我想要的。但是,当他选择创建新课程时,该新课程已经分配到一个类别。我想让用户能够创建新课程并从列表中选择一个类别,但当前路线不允许这样做。

 new_category_course GET    /categories/:category_id/courses/new(.:format)      courses#new

我不确定我现在应该做些什么,任何建议都会有很大的帮助。

1 个答案:

答案 0 :(得分:1)

  

我想让用户能够创建新课程并从列表中选择一个类别,但当前路线不允许这样做。

只是为了澄清它只是一条路线,它定义了当您点击网址时动作控制将在哪些控制器上运行。您的新课程与您的操作和表单中的类别相关联 。如果你看一下你的新动作,你就会有这样的事情:

def new
  @category = Category.find(params[:category_id])
  @category.courses.build #this line makes your course associated with your category
  # if you don't want to associated it with the present category then you can simply do:
  # @category = Category.new
  # and then in your form you can have a select and then assign category to that select
end

在您的情况下,您可以使用rails shallow routes,例如:

resources :categories do
  resources :courses, only: [:index, :create, :other_actions]
end
resources :courses, only: [:new]