0

我创建了一个测验,并且每页显示一个项目。我想要当前用户访问的问题 id 的值。在这段代码中,我接下来给出了我希望当前用户访问的问题 id 的问题

def next
@user = current_user
@student = Student.find_by_admission_no(@user.username)
@exam_group = ExamGroup.find_by_id(params[:exam_group_id])
@answer = Answer.new(params[:ans])
@answer.answer = params[:answer]
@answer.exam_group_id = @exam_group.id
@answer.user_id = @user.id
passed_question = params[:passed_question]
@answer.questions_id = passed_question
next_question = params[:next_question]
@question = Question.find_by_id(passed_question)
@module = Question.find_by_sql ["SELECT student_additional_field_id FROM questions WHERE id=#{passed_question}"]
student_additional_field_id = @module[0].student_additional_field_id
@questions = Question.find(:all, :conditions => [' exam_group_id=? && student_additional_field_id=? ',@exam_group,student_additional_field_id], :offset => @ans)

@ques = []
@questions.shuffle.each do |a|
  @ques.push a.id unless a.id.nil?
end
a = @ques[0]
session[:ques_id] = a
@answer.modules_id = student_additional_field_id
  if params[:answer] == @question.is_answer
    @answer.marks = 1
  else
    @answer.marks = 0
  end

if @answer.save
  @ans = Question.find_by_id(a, :conditions => [' id not in (?) && exam_group_id=?',answered, @exam_group])
  unless @ans.nil?
    render(:update) do |page|
      page.replace_html 'main', :partial => 'ans', :object => @ans
    end
  else
    render(:update) do |page|
      page.replace_html 'main', :partial => 'ans2'
    end
  end
end
end
4

1 回答 1

0

看来您的问题与Rails 模型关联有关

为什么我们需要模型之间的关联?因为它们使您的代码中的常见操作更简单、更容易。例如,考虑一个简单的 Rails 应用程序,它包括一个客户模型和一个订单模型。每个客户可以有多个订单


ActiveRecord 关联

ActiveRecord 关联允许您定义一个primary_key(通常是一个 ID),然后您可以通过foreign_key. 外键通常是一个表列,将被称为类似的东西user_id,或其他类型的 ID

您可以使用以下函数关联您的模型:

  • 属于
  • has_one
  • 有很多
  • has_many:通过
  • has_one :通过
  • has_and_belongs_to_many

要回答您的问题,您显然没问题current_user ID-因此,如果您设法正确设置了关系,则可以以这种方式直接调用数据:

@user = User.find(current_user.id)
@exam_group = @user.exams_groups 

我会浏览您的代码并在其中添加更多信息....但我认为您需要先了解 ActiveRecord 关联

于 2013-11-05T09:06:40.647 回答