0

この問題は squeel 1.0.11 で発生しています。問題を送信しましたが、コミュニティが既に回答を持っている可能性があると思いました。

モデル内の同じテーブルに対して 2 つのリレーションシップがあり、2 つの異なるスコープの結合でこれら 2 つのリレーションシップを使用しています。

class Log < ActiveRecord::Base
  attr_accessible :created_by_id, :updated_by_id
  belongs_to :created_by, class_name: "User"
  belongs_to :updated_by, class_name: "User"
  scope :suggested,
    joins{created_by}.
    where{(created_by.can_admin_logs == false) | 
          (created_by.can_admin_logs == nil)}
  scope :not_edited,
    joins{updated_by}.
    where{(updated_by.can_admin_logs == false) |
          (updated_by.can_admin_logs == nil)}
end

これらのスコープが一緒に変更されると、SQL が正しくなくなります。

Log.suggested.not_edited.to_sql

SELECT "logs".* FROM "logs" INNER JOIN "users" ON "users"."id" = "logs"."created_by_id" INNER JOIN "users" "updated_bies_logs" ON "updated_bies_logs"."id" = "logs "."updated_by_id" WHERE (("users"."can_admin_logs" = 'f' OR "users"."can_admin_logs" IS NULL)) AND (("updated_bies_logs"."can_admin_logs" = 'f' OR "updated_bies_logs". 「can_admin_logs」は NULL です))

問題を解決するためにさまざまな変更を加えupdated_bies_logsましたが、解決策は見つかりませんでした。

1.0.11 のリリース ノートはこれに対処しているように見えましたが、gem を更新しましたが、問題はまだここにあります。

4

2 に答える 2

2

jdoe の回答に加えて、モデルの読み込み時の実行を避けるために、スコープをラムダでラップすることもできます。スコープに関するラムダに関しては、いくつかの落とし穴があることに注意してください: http://ryreitsma.blogspot.com.au/2011/07/ruby-on-rails-3-chaining-scopes-with.html

于 2012-11-09T03:36:00.300 に答える
0

ツイストスコープをいくつか作成しました。あなたがあなたの鳴き声を鳴らすようにしたことは驚くべきことではありません:)

私はそれを次のようにします:

# in User
scope :cannot_admin_logs, where{can_admin_logs.eq_any [false, nil]}

# in Log 
scope :suggested,  joins{created_by}.merge(User.cannot_admin_logs)
scope :not_edited, joins{updated_by}.merge(User.cannot_admin_logs)
于 2012-10-06T11:09:02.210 に答える