0

stauscode、worequest、employeeの3つのテーブルがあります。Worequestはemployeeとemployeehas_manyworequestsに属しています。Worequestはstatuscodeに属し、statuscodeには多くのworequestがあります。

worequestのスコープもあります:

   scope :notcompl, where(:statuscode_id != Statuscode.last, true) 

完了していない従業員のworequestsを表示しようとしています。

 <% @employee.worequests.notcompl.each do |worequest| %>

私が得るエラー:G :: Error:ERROR:ANDの引数は整数型ではなくブール型でなければなりませんLINE 1:... uests"WHERE"worequests"。"employee_id"= 2 AND(1)ORDER B .. ..

従業員番号2を表示しようとしています。SQLに「and(1)」が含まれている理由がわかりません。

何か案は?

ありがとう!

4

2 に答える 2

0

compeltedstatus?)列名を指定し忘れましたか?その場合は、スコープを書き直す必要があります。

scope :notcompl, where("statuscode_id != #{Statuscode.last.id}").where(completed: true) 
于 2012-05-15T17:11:18.770 に答える
0

あなたのスコープ

   scope :notcompl, where(:statuscode_id != Statuscode.last, true) 

は壊れてます。一部のルビーオームとは異なり、activerecordはシンボルのメソッドをオーバーライドしないため、最終的には

where(true,true)

(シンボルが整数に等しくなることは決してないので)そしてtrueは整数1に型キャストされています。あるものが他のものと等しくない行を見つけたい場合は、次のことを行う必要があります。

where("status_code_id != ?", StatusCode.last.id)

また、これは、このスコープが含まれるファイルがロードされた時点での最後のステータスコードを使用することに注意してください。アプリが実行中にステータスコードを作成する場合は、スコープをラムダでラップする必要があります。

于 2012-05-15T17:23:50.247 に答える