0

这是我的控制器中的代码..

def create
@batch = Batch.find(params[:batch_id])
@exam_group = ExamGroup.find(params[:exam_group_id])
@module = StudentAdditionalField.find(params[:module_id])
@question = Question.new(params[:question])
@question.student_additional_field_id = @module.id
@question.exam_group_id = @exam_group.id
if @question.save or request.post?  
  if ( @question.id == @module.questions )
    flash[:notice] =  "Total no of questions added"
    redirect_to batch_exam_group_module_questions_path(@batch, @exam_group, @module), :id => @question_id
  else
    flash[:notice] =  "Question Added"
    redirect_to new_batch_exam_group_module_question_path(@batch, @exam_group, @module)
  end
end 

结尾

我的模块 sql 是

+----+--------+-----------+-------+

| id | name   | questions | marks |
+----+--------+-----------+-------+
|  1 | Quants | 1         | 1     |
|  2 | Eng    | 2         | 2     |
|  3 | Reason | 3         | 3     |
+----+--------+-----------+-------+

这里 if 语句没有得到只有 else 语句有效

4

2 回答 2

0

@module.questions 将返回与模块相关的所有问题的数组。这应该工作

if ( @question.id == @module.questions.last.id )
于 2013-09-27T08:23:14.240 回答
0

我想,您正在尝试检查问题是否在特定模块中。你可以试试

if @module.questions.include?(@question)

我想知道,您可能不需要测试请求的类型,因为如果您遵循默认的 rails 资源结构,创建操作将始终只接收“发布”请求。

更新:

我认为模块和问题之间的关联就像

class StudentAdditionalField
  has_many :questions
end

class Question
  belongs_to :StudentAdditionalField
end

您正在手动将问题与模块相关联。

@module   = StudentAdditionalField.find(params[:module_id])
@question = Question.new(params[:question])
@question.student_additional_field_id = @module.id
# ...
@question.save

所以不会有这样的条件,当问题不会与模块相关联时,else部分将永远不会被执行。

如果 params[:question] 包含有关模块的信息,则有一种方法,那么您不应该手动设置 student_additional_field_id。然后它会正常工作。

我想你想从 UI 发送模块信息作为 params[:question][:student_additional_field_id]

看看有没有道理。

于 2013-09-27T08:48:30.930 回答