我有一个问答应用程序,用户可以问问题和得到答案。我对答案部分有些问题。
我试图将问题的id存储在answers表中,但当我在控制台中检查时,它总是返回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
最佳答案
您的代码有几个问题。首先,应添加数据库约束,以防止在没有问题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
和白名单属性,用户可以在表单中设置这些属性。关于ruby-on-rails - 如何存储ID来回答,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35553896/