Rails多态关联的表单控制组

时间:2018-10-25 16:26:38

标签: ruby-on-rails

在我的rails应用程序中,我具有以下模型:

class Book < ApplicationRecord
   belongs_to :bookable, polymorphic: true
end

class Student < ApplicationRecord
   has_many :books, as: :bookable
end

class Library < ApplicationRecord
  has_many :books, as: :bookable
end

在form.html.erb中创建新书对象时,如何将t.integer:bookable_id和t.string:bookable_type映射到特定对象?

理想情况下,我将使用grouped_collection_select并将第一个Student和Library拉到其ID下方。

谢谢。

1 个答案:

答案 0 :(得分:0)

  

在form.html.erb中创建新书对象时,我该如何映射   t.integer:bookable_id和t.string:bookable_type到特定对象?

好吧,您可以根据需要使用collection_selectgrouped_collection_select来显示StudentsLibraries来存储bookable_id的值。

对于bookable_type,Rails可以读取实例的类名称并捕获该类名称,并将其存储为bookable_type的值。例如,考虑以下方法

@student = Student.find(1)
@student.books.create

以上代码段将在books表中使用bookable_id = 1bookable_type = "Student"

创建记录