Ruby on rails 如何将ID存储到答案

Ruby on rails 如何将ID存储到答案,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我有一个问答应用程序,用户可以在其中提问并获得答案。我在回答部分遇到了一些问题 我试图将问题的ID存储在答案表中,但当我在控制台中检查它时,它总是返回零 def new #question scaffold if user_signed_in? @question = current_user.questions.build respond_with(@question) else redirect_to new_user_ses

我有一个问答应用程序,用户可以在其中提问并获得答案。我在回答部分遇到了一些问题

我试图将问题的ID存储在答案表中,但当我在控制台中检查它时,它总是返回零

  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
使用验证来确保答案需要设置
问题id

class Answer < ActiveRecord::Base
  validates :question_id, presence: true
end
这就引出了代码的问题。我不清楚新的
在这里做什么。这是两个动作吗?一个动作?如果是一个操作,则您正在将
@answer.question\u id
设置为空值,因为
@question
已生成,但未保存


此外,请确保您正在使用用户可以在表单中设置的
strong_参数和白名单属性。

您刚刚在操作中创建了问题,因此为什么希望将问题id发送到操作,请检查以下“我更改了”#创建答案部分以使用创建的问题:(我错过了什么吗?)


你与问答表有什么联系答案表可以被视为注释,如果它能使问题更简单的话。我已经和你建立了很多属于你的关系。当我在控制台中手动添加
question\u id
时,它运行良好,并在正确的问题中显示答案。我想做的是将问题的ID存储在答案表中,而不是亲自去控制台。我只是注意到我们两人实际上生活在同一个国家。你有空参加私人会议吗?雷蒙德能帮我个忙吗?能否请您更新问题中的代码,以显示每个控制器以及该控制器内的相关操作?我是黎巴嫩人,但这些天我住在巴西的圣保罗。但我很乐意尽我所能提供帮助。有没有办法给你发个私人信息?
@answer = @question.answers.build(answer_params)
@answer.save
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