project.rb
class Project < ActiveRecord::Base
has_many :details, dependent: :destroy
accepts_nested_attributes_for :details, allow_destroy: true
end
详情.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和带有答案的字符串。但是现在我被困在表单上,我想获得一些有关如何制作表单来创建和编辑项目详细信息的帮助。在表单代码上,您可以准确找到我试图在伪代码中执行的操作。我也愿意接受不同的实施解决方案。谢谢!
你以错误的方式使用ActiveRecord::Enum
。它旨在将值映射到整数:
enum question: {question1: 1, question2: 2}
,
当您使用它将整数映射到值时。我建议您创建一个简单的访问器方法:
def questions(index)
["Question1", "Question2"][index]
end
这样你就可以选择这样的问题:
Detail.questions(n)
顺便说一句,如果您仅将Detail
用于举行这些问题,请摆脱它并将上述方法放在Project
.