我遇到了一个问题,我认为我的解决方案目前非常难看,有什么更好的方法可以使用 rails/mongoid 执行以下操作?基本上,用户可以进来并提供一个“nil”的 answer_id,但是一旦他们回答了问题,我们就想锁定他们的第一个非 nil 答案。
controller.rb
r = Response.new(user: current_user, question_id: qid, answer_id: aid)
r.save_now!
以及以下 response.rb 模型:
def save_now!
user = self.user
qid = self.question_id
aid = self.answer_id
resp = Response.where({user_id: user._id, question_id: qid}).first
# We accept the first answer that is non-nil,
# so a user can skip the question (answer_id=nil)
# And then return and update the answer_id from nil to 'xyz'
if resp.nil?
resp = Response.new(user: user, question_id: qid, answer_id: aid)
else
if resp.answer_id.nil? && aid.present?
resp.answer_id = aid
end
end
resp.save!
end
所以我想允许 answer_id 最初为零(如果用户跳过了问题),然后取第一个非零的答案。
我真的不认为两次实例化 Response 对象是直观和干净的,一次在控制器中,一次在模型中,但我不确定最好的方法是什么?谢谢。