【发布时间】:2015-09-30 09:14:53
【问题描述】:
我有两个模型:
学生 教室
它们都有一个完全相同的操作:它显示每日活动报告。那就是:
/students/1
/classrooms/1
获取相关模型的活动并将其显示在页面上。
为了解决这个问题,我创建了一个ReportsController,它提取了构建报告的所有常见逻辑。
如果我这样离开路线:
/students/1/report
/classrooms/1/report
然后我可以让ReportsController#show 操作为:student_id 或:classroom_id 查找params 以确定它正在处理的模型类型(用于查询数据库并呈现正确的视图)。
但我希望 URL 更简洁,因此我还更改了我的 routes.rb 文件以将这些模型的 show 操作传递给 reports#show 控制器操作:
resources :students, :classrooms do
member do
get :show, to: 'reports#show'
end
end
这可行,但我不能再依赖params 来确定要使用哪个模型以及要渲染哪个视图。
问题:我应该为模型解析 request.fullpath 吗?或者有没有更好的方法让共享控制器了解它正在使用的模型?
【问题讨论】:
-
你不能把所有的逻辑都移到模型中并保留 2 个非常简单的控制器动作来调用模型中的方法吗?
-
@abm 我如何避免在学生和教室模型中放置重复的逻辑?逻辑完全一样:他们在 events 表中查询 class_id = foo 或 student_id = bar 的事件。
-
如果您查询的是
events表,那么您的逻辑应该放在Event模型中。 -
@abm 对我来说说教室.events 与 events.where(classroom_id: 5) 更有意义
标签: ruby-on-rails controller routing