我正在建立一个武术相关的数据库,目前我已经建立了以下关联:
- 学生 has_and_belongs_to_many :styles
- 样式 has_many :ranks
- 学生 has_many :ranks, through: :gradings (反之亦然)
根据学生的风格,我正在生成如下表格:
所以标题是由Style
模型生成的(太极,空手道......),然后它们的排名如下(取自Rank
模型),并且“Dojo”和“Date”字段应该属于Grading
创建后的模型。
问题:我知道如何构建一个创建一个关联(或一个关联+它的子关联)的表单,但是我如何构建一个同时创建多个关联的表单?
此外,什么是实现以下内容的干净方法:
- 只有被勾选的行才会成为关联
- 勾选的行必须填写道场和日期才能成功保存
- 如果取消选中一条线,它将破坏任何先前创建的关联
这是我目前为检索正确记录而实施的:
class GradingsController < ApplicationController
before_filter :authenticate_sensei!
def index
@student = Student.includes(:styles).find(params[:student_id])
@ranks = Rank.for_student_styles(@student)
split_ranks_by_style
end
private
def split_ranks_by_style
@karate = @ranks.select_style("Karate")
@tai_chi = @ranks.select_style("Tai Chi")
@weaponry = @ranks.select_style("Weaponry")
end
end
# Rank model
def self.for_student_styles(student)
includes(:style).where("styles.id in (?)", student.styles.map(&:id))
end
def self.select_style(style)
all.map { |r| r if r.style.name == style }.compact
end