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和带答案的字符串。但现在我已经坚持使用表单了,我想知道如何创建表单以创建和编辑项目详细信息。在表单代码中,您可以准确地找到我在伪代码中要做的事情。我也愿意接受不同的实施解决方案。谢谢!
答案 0 :(得分:1)
您以错误的方式使用ActiveRecord::Enum
。它意味着将值映射到整数:
enum question: {question1: 1, question2: 2}
,
当您使用它将整数映射到值时。我建议你创建一个简单的访问方法:
def questions(index)
["Question1", "Question2"][index]
end
这样你就可以选择这样的问题:
Detail.questions(n)
顺便说一下,如果您仅仅使用Detail
来保存这些问题,请将其删除并将上述方法放在Project
中。