我有一个Q& A应用,用户可以在其中提问并获得答案。答案部分我遇到了一些麻烦。
我正在尝试将问题的ID存储在答案表中,但当我在控制台中检查时,它总是会返回nil。
def new
#question scaffold
if user_signed_in?
@question = current_user.questions.build
respond_with(@question)
else
redirect_to new_user_session_path
end
#answer scafold
@answer = Answer.create
@question = Question.find(params[:id])
@answer.question_id = @question
@answer.save!
redirect_to root_path
end
def edit
end
def create
#create question
@question = current_user.questions.build(question_params)
@question.save
#create answer
@answer = Answer.create(answer_params)
@question = Question.find(params[:id])
@answer.question_id = @question
@answer.save!
redirect_to :back
end
答案 0 :(得分:0)
您的代码存在多个问题。首先,您应该添加数据库约束以防止在没有问题ID的情况下保存答案。生成执行此操作的迁移。
add_foreign_key :answers, :questions
使用验证确保答案需要设置question_id
。
class Answer < ActiveRecord::Base
validates :question_id, presence: true
end
您还应该使用ActiveRecord关系来简化构建模型。
@answer = @question.answers.build(answer_params)
@answer.save
这使我们了解您的代码问题。我不清楚new
在这里做了什么。这是两个动作吗?一个动作?如果是一个操作,则您将@answer.question_id
设置为自@question
构建后的空白值,而不是保存。
此外,请确保您使用的是用户可以在表单中设置的strong_parameters
和白名单属性。
答案 1 :(得分:0)
您刚刚在操作中创建了问题,所以为什么您希望将问题ID发送到操作,请检查以下我更改了#create answer part以使用创建的问题:(我错过了什么?)
def create
#create question
@question = current_user.questions.build(question_params)
@question.save
#create answer
@answer = Answer.create(answer_params)
@answer.question = @question
@answer.save!
redirect_to :back
end