Я погуглил себя почти до смерти из-за этого, и самое близкое, что я нашел к чему-либо подобному, это этот вопрос переполнения стека (который пытается задать несколько вопросов одновременно).У меня есть только один.Хорошо, два - но если вы ответите первым, то ваш ответ будет принят при условии, что он соответствует приведенным ниже требованиям.
Я использую Rails 3 и Ruby 1.8.7 с устаревшей базой данных.Единственное, что подлежит обсуждению - это версия Rails.Я застрял с Ruby 1.8.7 и структурой базы данных.
Вот важные части участвующих моделей:
class List < ActiveRecord::Base
set_primary_key "ListID"
has_many :listitem, :foreign_key => "ListID", :dependent => :destroy
has_many :extra_field, :foreign_key => "ListID", :dependent => :destroy
end
class Listitem < ActiveRecord::Base
set_table_name "ListItems"
set_primary_key "ListItemID"
belongs_to :list
has_many :list_item_extra_field, :foreign_key => 'ListItemID', :dependent => :destroy
end
Вот что я получаю в консоли rails:
irb(main):001:0> List.joins(:listitem).to_sql
=> "SELECT [lists].* FROM [lists] INNER JOIN [ListItems] ON [ListItems].[ListID] IS NULL"
Когда я ожидаю SQL-выражение, похожее на:
SELECT [lists].* FROM [lists] INNER JOIN [ListItems] ON [ListItems].[ListID] = [Lists].[ListID]
Если я попаду на приведенный выше запрос, то получу правильный ответ.Бонусные баллы, если вы можете сказать мне, как добраться до чего-то эквивалентного:
SELECT [lists].*, COUNT([ListItems].*) FROM [lists] INNER JOIN [ListItems] ON [ListItems].[ListID] = [Lists].[ListID]