Ruby On Rails模型/控制器问题

时间:2011-03-06 15:57:03

标签: ruby-on-rails

我有一个CourseCategory模型和一个课程模型以及相应的控制器course_categories和课程。课程属于一个类别,一个类别有很多课程。

我想要一个显示特定类别课程的页面。该功能属于哪个控制器?我应该嵌套这些资源吗?只是寻找建模的最佳方式。

4 个答案:

答案 0 :(得分:2)

CourseCategories。想想您的网址,这是做出这样决定的最简单方法:

example.com/course_categories/1

- 或者,更好的是,使用slugs作为类别而不是id,你会得到 -

example.com/course_categories/awesome_courses/

然而,考虑简单地使用“类别”模型而不是“course_categories”模型可能是值得的。然后你可以在课程中嵌套类别,你会得到类似的东西:

example.com/courses/categories/1example.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(课程显示页面)