我有這樣的代碼:對加盟條件使用rewhere
class Meeting
has_many :attendees, class_name: 'MeetingsUsers', autosave: true
scope :x, -> { Meeting.where(x:13) }
scope :y, -> { Meeting.where('x':13) }
scope :z, -> { Meeting.joins(:attendees).where('meetings_users.user_id': 123)}
end
Rewhere工作在這些情況下: Meeting.x.to_sql Meeting.x.rewhere(x: 1234).to_sql Meeting.y.to_sql Meeting.y.rewhere('x': 1234).to_sql
但在這種情況下,它不會:
Meeting.z.to_sql
由此產生的SQL是這一個: "SELECT \"meetings\".* FROM \"meetings\" INNER JOIN \"meetings_users\" ON \"meetings_users\".\"meeting_id\" = \"meetings\".\"id\" AND \"meetings_users\".\"deleted_at\" IS NULL WHERE \"meetings\".\"deleted_at\" IS NULL AND \"meetings_users\".\"user_id\" = 123"
隨着rewhere:
Meeting.z.rewhere('meetings_users.user_id': 1234).to_sql
生成的SQL是這樣的一個: "SELECT \"meetings\".* FROM \"meetings\" INNER JOIN \"meetings_users\" ON \"meetings_users\".\"meeting_id\" = \"meetings\".\"id\" AND \"meetings_users\".\"deleted_at\" IS NULL WHERE \"meetings\".\"deleted_at\" IS NULL AND \"meetings_users\".\"user_id\" = 123 AND \"meetings_users\".\"user_id\" = 1234"
正如你可以看到有兩個條件在同一領域:
"meetings_users\".\"user_id\" = 123 AND \"meetings_users\".\"user_id\" = 1234"
所以在某些神祕的原因沒有產生效果...
不幸的是,它不會工作,我調試它。在query_methods.rb行914「subrelation.name == target_value」應該是類似於rel.left.relation.name +「。」。 + rel.left.name – Boti