Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在Rails应用程序中建模学习程序_Ruby On Rails_Rails Activerecord - Fatal编程技术网

Ruby on rails 如何在Rails应用程序中建模学习程序

Ruby on rails 如何在Rails应用程序中建模学习程序,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,我正在开发一个Rails应用程序,使学生能够注册考试缺勤 这些是模型 class User < ApplicationRecord has_many :absences has_many :courses, through: :absences end class Absence < ApplicationRecord belongs_to :user belongs_to :course end class Course < ApplicationReco

我正在开发一个Rails应用程序,使学生能够注册考试缺勤

这些是模型

class User < ApplicationRecord
  has_many :absences
  has_many :courses, through: :absences
end

class Absence < ApplicationRecord
  belongs_to :user
  belongs_to :course
end

class Course < ApplicationRecord
  has_many :absences
  has_many :users, through: :absences
end
class用户
如您所见,我使用的是一个join_表Absences,它保存了用户和课程的外键

登记表如下所示:

<%= form_for [current_user, @absence] do |f| %>
  <%= f.label :course_id, "Vak" %>
  <%= f.select :course_id, options_for_courses, label: "Vak" %>
  <%= f.label :date, "Datum" %>
  <%= f.text_field :date %>
  <%= f.submit "Afwezigheid aanvragen" %>
<% end %>

现在,我应该允许学生也将他们的学习计划输入注册表。但我不知道实现这一点的最佳方式是什么。我应该在缺勤表中添加一个字段(“学习计划”),还是应该将学习计划建模到它自己的模型(课堂学习计划)中

任何建议都是受欢迎的,最终学生应该能够在登记缺勤时从登记表的选择框中选择他的学习计划

谢谢你的帮助


Anthony

这里的一般规则是:学习程序是否要存储自己的信息?可供选择的学习项目列表是否会改变

如果
study\u program
可以建模为一个枚举,并且很少更改,那么拥有自己的表就没有意义了

如果有一天,你想添加更多关于某个学习项目的信息,或者让管理员添加新的学习项目,那么最好将其作为自己的模型

作为旁注,我不太清楚什么是学习计划以及它与课程的关系——这里的更多信息可能会带来更好的答案


根据评论进行编辑:

不要认为学习计划会随着时间的推移发生很大变化。它也不会存储其他信息。唯一需要的信息是研究计划的名称

在这种情况下,假设该值可以表示为一个符号,“推荐”的存储解决方案将是一个枚举,它将作为整数存储在数据库中,名称在代码库中定义。缺点是数据库不知道每个数字的含义,这会使一些查询复杂化。例如,要搜索与两个学习计划相关的缺勤情况,您可能需要执行以下操作

Absence.where(study_program: [ 
                               Absence.study_programs[:some_program], 
                               Absence.study_programs[:other_program],
                             ])
(通过正确使用
范围
地图
,这可以变得更容易-我将把它作为练习留给读者!)

好处是,你可以得到方便的方法-
缺勤。一些程序将返回
一些程序
缺勤.一些程序中的所有缺勤
将设置枚举并保存记录

如果决定避开枚举,并希望将值存储在字符串数据库字段中,则需要创建一个允许值的数组,并确保该字段上存在验证,例如:

class Absence < ApplicationRecord
  belongs_to :user
  belongs_to :course

  STUDY_PROGRAMS = ['Some program', 'Another program']

  validates :study_program, inclusion: { in: STUDY_PROGRAMS }
end
缺课
否则,学生可以通过发布新字符串来编制自己的学习计划。这也意味着您可以使用注册表中的
缺勤::学习计划


您不会得到任何方便的方法,但无论如何,搜索将变得更加方便。请记住确保您的字段已编入索引。

这里的一般规则是:学习程序是否要存储自己的信息?可供选择的学习项目列表是否会改变

如果
study\u program
可以建模为一个枚举,并且很少更改,那么拥有自己的表就没有意义了

如果有一天,你想添加更多关于某个学习项目的信息,或者让管理员添加新的学习项目,那么最好将其作为自己的模型

作为旁注,我不太清楚什么是学习计划以及它与课程的关系——这里的更多信息可能会带来更好的答案


根据评论进行编辑:

不要认为学习计划会随着时间的推移发生很大变化。它也不会存储其他信息。唯一需要的信息是研究计划的名称

在这种情况下,假设该值可以表示为一个符号,“推荐”的存储解决方案将是一个枚举,它将作为整数存储在数据库中,名称在代码库中定义。缺点是数据库不知道每个数字的含义,这会使一些查询复杂化。例如,要搜索与两个学习计划相关的缺勤情况,您可能需要执行以下操作

Absence.where(study_program: [ 
                               Absence.study_programs[:some_program], 
                               Absence.study_programs[:other_program],
                             ])
(通过正确使用
范围
地图
,这可以变得更容易-我将把它作为练习留给读者!)

好处是,你可以得到方便的方法-
缺勤。一些程序将返回
一些程序
缺勤.一些程序中的所有缺勤
将设置枚举并保存记录

如果决定避开枚举,并希望将值存储在字符串数据库字段中,则需要创建一个允许值的数组,并确保该字段上存在验证,例如:

class Absence < ApplicationRecord
  belongs_to :user
  belongs_to :course

  STUDY_PROGRAMS = ['Some program', 'Another program']

  validates :study_program, inclusion: { in: STUDY_PROGRAMS }
end
缺课
否则,学生可以通过发布新字符串来编制自己的学习计划。这也意味着您可以使用注册表中的
缺勤::学习计划

您不会得到任何方便的方法,但无论如何,搜索将变得更加方便。请记住确保您的字段已编入索引。

您好,谢谢