我已经使用过rails 2 ......但我仍然是铁路3 noob /灾难。
@questions是问题表中的一组问题。我需要确保每个问题在答案表中都有相应的答案记录。如果不存在,我需要创建一个默认值为零的。在我的控制器中,我有以下内容:
# create records for answers that do not exist yet
@questions.each do |q|
a = Answer.where(q.id = Answer.question_id and current_user.id = Answer.user_id )
if a.nil?
Answer.new(:question_id => q.id, :score => 0)
end
end
我收到此错误:
undefined method `question_id'
我正在度假并使用Rails进行第四版Agile Web Development(不要告诉我的妻子:=])这里提供的任何帮助都会有所帮助。
感谢。
答案 0 :(得分:2)
您的代码应如下所示
@questions.each do |q|
a = Answer.where(:question_id => q.id, :user_id => current_user.id)
if a.empty?
Answer.new(:question_id => q.id, :score => 0)
end
end
但它可以重构为
@questions.each do |q|
q.answers.create(:score => 0) unless q.answers.where(:user => current_user).any?
end
修改强>
至于你不明白这里发生了什么:你应该或create
或save
你的对象:
answer = Answer.new(:question_id => q.id, :score => 0)
answer.save
或
Answer.create(:question_id => q.id, :score => 0)
答案 1 :(得分:1)
activerecord查询语法不正确。它应该是这样的 -
@questions.each do |q|
a = Answer.where("question_id = ? AND user_id = ?", q.id, current_user.id )
if a.nil?
Answer.new(:question_id => q.id, :score => 0)
end
end
请查看此帖子了解更多详情http://m.onkey.org/active-record-query-interface
答案 2 :(得分:0)
假设您已向has_many
添加Question
关系,则可以执行此操作
@questions.each do |q|
if q.answers.empty?
q.answers.create! :score => 0, :user => current_user
end
end
它迭代问题,检查问题是否有答案,并添加一个得分为零的用户current_user
,如果它是空的。如果保存失败也会引发错误(这是!
添加create
或save
的错误。
您必须确保您的模型了解此工作的关系:
class Question < ActiveRecord::Base
has_many :answers
end
class Answer < ActiveRecord::Base
belongs_to :question
belongs_to :user
end