如何将ID存储到答案中

时间:2016-02-22 12:36:48

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个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

2 个答案:

答案 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