我有一个问答应用程序,用户可以提出问题并获得答案。我在回答部分遇到了一些麻烦。
我试图将问题的ID存储在answers表中,但当我在控制台中检查它时,它总是返回空。
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发布于 2016-02-22 20:45:35
您的代码有几个问题。首先,您应该添加一个数据库约束,以防止保存没有问题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和白名单属性。
发布于 2016-02-22 20:45:54
您刚刚在操作中创建了问题,所以为什么您期望将问题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
endhttps://stackoverflow.com/questions/35553896
复制相似问题