创建具有嵌套属性和提示的表单(has_many关联)

时间:2013-11-09 10:41:05

标签: ruby-on-rails simple-form

所以问题是我有这些课程。

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,每个字段(不要与TextFieldIntegerField混淆)都有一列“type”(以指明是否为是Text或Integer字段)和描述(例如,“你有多少只宠物”为integerField)。当用户想要创建新帖子时,首先他选择类别。然后,根据每个类别Fields的内容,应构建和呈现正确的TextFieldsIntegerFields。 我希望我的观点很明确,我希望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

0 个答案:

没有答案