我有一个问答应用程序,用户可以问问题和得到答案。我对答案部分有些问题。
我试图将问题的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/

10-16 23:26