从枚举中选择隐藏和标签

时间:2015-10-16 10:42:04

标签: ruby-on-rails forms enums

project.rb

class Project < ActiveRecord::Base
  has_many :details, dependent: :destroy

  accepts_nested_attributes_for :details, allow_destroy: true

end

details.rb

class Details < ActiveRecord::Base
  belongs_to :project

  enum question: {
    0: "Question 1...",
    1: "Question 2..."
  }

end

详细信息表

create_table "details", force: :cascade do |t|
    t.integer "project_id"
    t.integer "question"
    t.string  "answer"
  end

项目表格

  = form_for @project do |f|

  ...

  %h3 Questions
  = f.fields_for :details do |d|
    .nested-fields
      .field
        = d.label (question value here)
        = d.hidden_field (question ID here)
        = d.text_field :answer
      %br/

  ...

  .actions
    = f.submit "Submit"

基本上我的项目有一个详细信息表,可以存储5个问题的集合。这些问题是静态的,并且总是一样的。我认为解决方案是制作和枚举,并在详细信息表中存储问题的ID和带答案的字符串。但现在我已经坚持使用表单了,我想知道如何创建表单以创建和编辑项目详细信息。在表单代码中,您可以准确地找到我在伪代码中要做的事情。我也愿意接受不同的实施解决方案。谢谢!

1 个答案:

答案 0 :(得分:1)

您以错误的方式使用ActiveRecord::Enum。它意味着将值映射到整数:

enum question: {question1: 1, question2: 2}

当您使用它将整数映射到值时。我建议你创建一个简单的访问方法:

def questions(index)
  ["Question1", "Question2"][index]
end

这样你就可以选择这样的问题:

Detail.questions(n)

顺便说一下,如果您仅仅使用Detail来保存这些问题,请将其删除并将上述方法放在Project中。