我建立一個武術相關的數據庫,目前我有以下協會成立:如何通過一種形式創建多個「has_many through」關聯?
- 學生has_and_belongs_to_many:風格
- 風格的has_many:居
- 學生的has_many:行列,通過:分級(反之亦然)
我產生如下形式,根據學生的風格:
所以標題由Style
模型(太極,空手道......)產生的,那麼他們的排名列表如下(從Rank
模型中得到),以及「道場」和「日期」字段應該屬於一旦創建了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
感謝您的回答,我結束了實現類似的事情,一旦我記得我可以格式化哈希。服務對象使得一切都變得更加清潔! –