2016-04-10 9 views
2

なぜこれが起こっているのか正直に分かりません。私はすべてを試しました。私のコントローラ(ruby on rails)のif文はすべて真として扱われていますか?

例: 私が学生が以前に取ったすべてのコースを通過しようとしているとしましょう。多分私はのようなものを設定するので:

  student.courses.each do |course| 
      if course.name = "C0pm19abagdastgeagesdgs" 
       @test = 'hit' 
      end 
      end 

明らかにそれが本当であることを行っていないが、それはとにかく真実としてそれを返します。

  student.courses.each do |course| 
      if course.name = "COMP1900" 
       @test = 'hit' 
      end 
      end 

このような状況でするのと同じように、trueを返します。このif文だけではありません。これはif文のすべてに対して行います。それが何を扱っているかに関係なく、プロジェクト、課題、学生、コース。名前、日付、何でも使用する。私は何が起こったのか分かりません。なぜなら、以前のステートメントがそうするべきであるならば、コード内の他の部分に以前にあったからです。私は非常に混乱しており、何が起こっているのか分かりません。コードブロックを間違ってスキップすることさえあります。なぜ私は考えていない。

答えて

5

Rubyではがの割り当てに使用されているからです。

オブジェクトを割り当てた後、戻り値はオブジェクトそのもので、truthyです。あなたは比較演算子==を使用したいあなたのケースで

course.name == "COMP1900" 
+0

あまりにも前にそれを試しました。何らかの理由で依然としてトリガします。実際には、それだけではトリガしませんでした。重複して割り当てられた値を出力しました。それは私が推測することではないですか? – gllwrnce

+0

「割り当てられた値を複製する」という意味を明確にすることはできますか? –

+0

たとえば、生徒が出力リストに2回割り当てられることがあります。しかし、すべての時間ではありません。また、値が実際にtrueの場合(course.name == "COMP1900"の場合など)、falseを出力します。今私がしようとしているのは、ある学生がすでにコースを受講しているかどうかを確認することです。つまり、student.precoursesは配列(@precourses = student.precoursesに配置されています)を意味しています。データベース(@ courses.each do | course |)と@ precourses.include?(course.name) – gllwrnce

関連する問題