这个问题是关于Rails 4 / postgresql而且该应用程序是在Heroku上托管的。
我正在网站上制作测验功能,我想知道如何最好地实现表格(使用Formtastic),以尽可能简化。我有三种模式:
我已经设置了这样的表格:
<%= semantic_form_for([:admin, @quiz], :url => admin_quiz_path(@quiz.id)) do |f| %>
<%= render 'form' , :f => f %>
<% end %>
表单如下所示:
<%= f.inputs %>
<h3>Quiz questions</h3>
<%= f.semantic_fields_for :quiz_questions do |qq_f| %>
<%= qq_f.inputs %>
<h4>Quiz options</h4>
<%= qq_f.semantic_fields_for :quiz_options do |qqo_f| %>
<%= qqo_f.inputs %>
<% end %>
<% end %>
<%= f.actions do %>
<%= f.action :submit %>
or go <%= link_to 'back', admin_quizzes_path %>
<% end %>
然而,似乎不是按照我想要的方式工作。我希望能够以这种形式看到QuizQuestion和QuizOptions的字段(有那些对象),但我不知道。
更重要的是,我希望能够以这种形式创建一个新的QuizQuestion和随后的QuizOption。它不一定是jQuery / ajax或者其他任何东西,但是我想从这个表单中做到这一切。
基本上,我希望我的工作流程如下:
我该怎么做?
答案 0 :(得分:1)
对于您的工作流,您可能必须为嵌套资源添加accept_nested_attributes_for,这样在创建对象对象时,您实际上可以创建嵌套子项(只要它们满足所有验证)。这样:
change: function (e) {
veh_TRANSPORTEUR = this.dataItem();
},
声明如下:
# A quiz :has_many :quiz_questions
@quiz = Quiz.create(...)
在您的has_many :quiz_questions
accepts_nested_attributes_for :quiz_questions
模型中,您实际上可以从测验模型中创建QuizQuestion,如:
Quiz
对深度嵌套的关联执行相同操作也会产生相同的效果。
也许您没有在表单上看到任何字段的原因是因为没有创建嵌套对象。让我解释。当您创建一个新的测验对象时,在# using the previously quiz model
quiz.quiz_questions.create(...)
(或测验的任何变形是......)中,您需要:
quizs_controller
和
def new
quiz = Quiz.new()
end
如果您真的希望能够看到表单中的字段,那么您必须使用build方法并实际使用相应的嵌套资源填充该新对象。
请注意,为了使用表单,您必须在def create
Quiz.new(quiz_params)
end
private
def quiz_params
# whitelisted parameters sent along with the form
params.require(:quiz).permit(...)
end
正确的属性中列入白名单。发送新测验处方后,您可以调试收到的参数,并检查一切是否正确。
TIP!如果您在动态添加嵌套资源时不想担心JS,我建议您使用cocoon gem