我有一个CourseCategory模型和一个课程模型以及相应的控制器course_categories和课程。课程属于一个类别,一个类别有很多课程。
我想要一个显示特定类别课程的页面。该功能属于哪个控制器?我应该嵌套这些资源吗?只是寻找建模的最佳方式。
答案 0 :(得分:2)
CourseCategories。想想您的网址,这是做出这样决定的最简单方法:
example.com/course_categories/1
- 或者,更好的是,使用slugs作为类别而不是id,你会得到 -
example.com/course_categories/awesome_courses/
然而,考虑简单地使用“类别”模型而不是“course_categories”模型可能是值得的。然后你可以在课程中嵌套类别,你会得到类似的东西:
example.com/courses/categories/1
或example.com/courses/categories/hard
答案 1 :(得分:0)
我会说你将展示一个课程类别列表 - 因此属于coursecategory控制器。
答案 2 :(得分:0)
您可以添加此项以使课程控制器和参数说明要响应的类别。
或者,如果有意义,您可以将课程设为course_categories的嵌套属性。那么这将是默认行为。
编辑因为我给了别人相反的答案。第一个建议会让你
/courses?course_category=math
或
/courses/math
然后在控制器中查找course_category
第二个想法会让你做到
/math/courses
答案 3 :(得分:0)
另一种方法是做类似
的事情routes.rb
resources :course_catgeories do
resources :courses
end
courses_controller.rb
def index
@course_category = CourseCategory.find(params[:course_category_id])
@courses = @course_category.courses
end
这里的逻辑是,如果你列出一个类别的课程,那么传统的行动就是索引动作。除了在这种情况下,您将列表范围限定为特定类别。因此,如果你用这些术语来思考,我认为这种方法可以更好地模拟你的领域。
这种方法有效地产生了以下路线:
/ course_categories /(类别索引页)
/ course_categories / 1(类别显示页面)
/ course_categories / 1 / courses(课程索引页)
/ course_categories / 1 / courses / 1(课程显示页面)