не может сделать: присоединяется без написания кода SQL - PullRequest
0 голосов
/ 15 сентября 2010

Я не могу понять, почему этот код работает:

@ads = Ads.find(
   :all,
   :joins => "INNER JOIN ad_users u ON u.ad_users_id=ads.ad_users_id"
 )

, а этот нет:

    @ads = Ads.find(
   :all,
   :joins => :AdUsers
 )

мои классы:

class Ads < ActiveRecord::Base
  set_primary_key :ads_id
  belongs_to :AdUsers
end

и

class AdUsers < ActiveRecord::Base
  set_primary_key :ad_users_id  
  has_many :Ads
end

Я использую базу данных sqlite.SQL, созданный для объединения:

SELECT "ads".* FROM "ads" INNER JOIN "ad_users" ON "ad_users"."ad_users_id" IS NUL

Кто-нибудь может мне помочь?Я знаю, что это не блокировщик, но я не хочу писать SQL для объединения, если мне не нужно.

спасибо

1 Ответ

1 голос
/ 15 сентября 2010

Не углубляясь слишком глубоко, я вижу пару вещей, которые могут сбить с толку логику соединения. Во-первых, я думаю, что вы хотите, чтобы ваши символы были в нижнем регистре с подчеркиваниями в предложении объединения и ассоциациях. (Например, :ad_users вместо :AdUsers) Кроме того, соглашения Rails предлагают особые имена классов, хотя, если вы действительно этого хотите, вы можете обойти это, указав имя класса явно:

class AdUsers < ActiveRecord::Base
  set_primary_key :ad_users_id
  has_many :ads, :class_name => 'Ads'
end
# ...and so forth

Если, конечно, у вас нет веских причин, я бы предложил использовать только имена классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...