所以问题是我有这些课程。
class Post < ActiveRecord::Base
belongs_to :category
has_many :text_fields
has_many :integer_fields
accepts_nested_attributes_for :text_fields
accepts_nested_attributes_for :integer_fields
end
class Category < ActiveRecord::Base
has_many :fields
end
class TextField < ActiveRecord::Base
belongs_to :post
end
class IntegerField < ActiveRecord::Base
belongs_to :post
end
Category
有很多Fields
,每个字段(不要与TextField
或IntegerField
混淆)都有一列“type
”(以指明是否为是Text或Integer字段)和描述(例如,“你有多少只宠物”为integerField)。当用户想要创建新帖子时,首先他选择类别。然后,根据每个类别Fields
的内容,应构建和呈现正确的TextFields
和IntegerFields
。
我希望我的观点很明确,我希望Post生成器根据类别生成不同的字段,这很简单。
发表表格(暂时没有步骤)
= simple_form_for @poster do |f|
= f.input :category_id, collection: Category.all, prompt: "Choose category"
= f.input :title
= f.simple_fields_for :text_fields do |ftf|
= ftf.input :description
= f.simple_fields_for :integer_fields do |fif|
= fif.input :integer_number
= f.submit
而且这是错的。我不知道如何给每个领域一个适当的提示。每个TextField或IntegerField只是因为Category
需要它(基于字段)。但我可以让它有一个适当的提示,而不是每次只有'integer number
'吗?
以下是我构建这些字段的方式,它对变化持开放态度:
def build_fields_based_on_category
category.fields.each do |field|
self.send("#{field.kind}_fields").build
##### 'kind' can be integer or 'text'
end
end