这是我的模型。
民意调查
class Survey < ActiveRecord::Base
belongs_to :user
has_many :questions, :dependent => :destroy
accepts_nested_attributes_for :questions, :reject_if => lambda {|a| a[:content].blank?}, :allow_destroy => true
问题:有 is_correct(boolean) 列表示学生是否得到正确答案。
class Question < ActiveRecord::Base
belongs_to :survey
has_many :answers, :dependent => :destroy
accepts_nested_attributes_for :answers, :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true
答案:有教师检查进行调查(测试)的正确(布尔)列,有学生标记参加测试的用户回答(布尔)列。
class Answer < ActviveRecord::Base
belongs_to :question
我想比较 Answer 模型中的正确和 user_answer,并将答案保存到 Question 模型中的 is_correct 中。
不仅有生成问题和答案的基本 CRUD 方法,还有用于回答(GET)/评分(POST)考试、显示(GET)结果的三种额外方法。我可以从 rake 路由的结果中检查这条路由没有问题。
更新问题:我更改了控制器和问题模型。
以下是调查控制器中的方法。
def answering
@survey = Survey.find(params[:id])
end
def grading
@survey = Survey.find(params[:id])
@survey.user_id = current_user.id
@survey.questions.each do |q|
q.auto_check
end
redirect_to results_survey_path(@survey)
end
def results
end
这是问题控制器。
def auto_check
answers.each do |a|
is_correct = true if a.user_answer and a.correct
self.save!
end
end
rake 路由的结果。
$ rake routes | grep survey
(in /home/seriousin/ClassCasts)
answering_survey GET /surveys/:id/answering(.:format) surveys#answering
grading_survey POST /surveys/:id/grading(.:format) surveys#grading
results_survey GET /surveys/:id/results(.:format) surveys#results
surveys GET /surveys(.:format) surveys#index
POST /surveys(.:format) surveys#create
new_survey GET /surveys/new(.:format) surveys#new
edit_survey GET /surveys/:id/edit(.:format) surveys#edit
survey GET /surveys/:id(.:format) surveys#show
PUT /surveys/:id(.:format) surveys#update
DELETE /surveys/:id(.:format) surveys#destroy
*问题是我不能调用调查对象保存的用户输入。*
我让结果方法为空。使用redirect_to,我不需要生成另一个调查对象。
def results
#@survey = Survey.where(params[:survey_id])
end
我认为没关系。因为我可以将调查对象作为分级方法的参数传递。
def grading
@survey = Survey.find(params[:id])
@survey.user_id = current_user.id
@survey.questions.each do |q|
q.auto_check
end
redirect_to results_survey_path(@survey)
end
但结果是'nil:NilClass'的'未定义方法'名称'......我如何使用包含用户输入的对象?
谢谢先进。