新手问题 Ruby on Rails 可以自动计算关联 model 的数据吗。。。

sssssssssssssss · 2020年05月15日 · 最后由 sssssssssssssss 回复于 2020年05月19日 · 3560 次阅读

不好意思是 ruby on rails 的新手。。。还不是特别会用 ruby on rails 里的关联功能。。。 目前遇到的问题比如 model1 是老师(有老师 ID 和老师姓名作为变量),model2 是工作时间(有时长,月份,年份作为变量)model3 是课程(有课程 id,老师 id,年份,月份,时长作为变量)。 课程选择分配以后用户可以选择哪个老师上课,老师的工作时长和日期 月份,分配完成以后有一个页面可以自动显示哪月哪天老师 A 的工作时间,老师 B 的工作时间。。。

需要在 mode 里设置关联。 官方参考链接https://guides.rubyonrails.org/association_basics.html

如果你能理清逻辑并且写成代码就可以。

按我对这个上课需求的理解,关系大概是下边这些:

class Course < ApplicationRecord
  has_many :arrangements
end

class Teacher < ApplicationRecord
  has_many :arrangements
end

class Arrangement < ApplicationRecord
  belongs_to :course
  belongs_to :teacher

  # 假设老师跟学生只能是一对一预约
  has_one :appointment

  # 其他属性:何年何月何日何时上课
end

# 获取课程下所有老师及其对应工作时间安排
# Course.last.arrangements

class Student < ApplicationRecord
  has_many :appointments
end

class Appointment < ApplicationRecord
  belongs_to :student
  belongs_to :arrangement
end
ken 回复

不好意思是我没问清楚,我不是很明白关联以后怎么在页面上生成表格,然后表格里的数据按照条件生成。。。这个功能在 rails 里怎么实现。。。

Controller 里定义实例变量,取 Model 的数据的值。然后在相应页面上调用这个实例变量。值显示上去了。 下一步就是把值变成表格,用 table 标签写好 html 把数据排进去就可以了。如果是生产 Excel 表格,用 roo 之类的插件就可以了。

建议先去熟悉下 Rails Guide 和 MVC 框架哦

Catherine 回复

不好意思。。。我看了看,目前写的是在 model 里面用 scope 选择条件(月份),然后在 controller 用 sum 方法累加小时数,最后在表格里用 each generate 出来,这样做您觉得有道理吗。。。

数据量不大就直接把 3 个表 join 在一起,需要哪个老师的,直接想办法取。我觉得你只要取出来了,就都有道理。只是写完想想有没有其他办法,哪种效率更高,哪种更合理。用什么方法,用 where 或者 scope 都不是重要的。

Catherine 回复

嗯好的。。。谢谢您了,不是特别熟练不好意思

需要 登录 后方可回复, 如果你还没有账号请 注册新账号