提交 63026541 编写于 作者: E Ernie Miller 提交者: Jeremy Kemper

Fix honoring :primary_key option when joining or eager loading a belongs_to association

[#765 state:committed]
Signed-off-by: NJeremy Kemper <jeremy@bitsweat.net>
上级 a509b0b1
......@@ -324,7 +324,7 @@ def preload_belongs_to_association(records, reflection, preload_options={})
klass = klass_name.constantize
table_name = klass.quoted_table_name
primary_key = klass.primary_key
primary_key = reflection.options[:primary_key] || klass.primary_key
column_type = klass.columns.detect{|c| c.name == primary_key}.type
ids = id_map.keys.map do |id|
......
......@@ -2031,7 +2031,7 @@ def association_join
[aliased_table[foreign_key].eq(parent_table[reflection.options[:primary_key] || parent.primary_key])]
end
when :belongs_to
[aliased_table[reflection.klass.primary_key].eq(parent_table[options[:foreign_key] || reflection.primary_key_name])]
[aliased_table[options[:primary_key] || reflection.klass.primary_key].eq(parent_table[options[:foreign_key] || reflection.primary_key_name])]
end
unless klass.descends_from_active_record?
......
......@@ -32,6 +32,12 @@ def test_belongs_to_with_primary_key
assert_equal companies(:first_firm).name, client.firm_with_primary_key.name
end
def test_belongs_to_with_primary_key_joins_on_correct_column
sql = Client.joins(:firm_with_primary_key).to_sql
assert_no_match /"firm_with_primary_keys_companies"\."id"/, sql
assert_match /"firm_with_primary_keys_companies"\."name"/, sql
end
def test_proxy_assignment
account = Account.find(1)
assert_nothing_raised { account.firm = account.firm }
......@@ -61,6 +67,13 @@ def test_natural_assignment_with_primary_key
assert_equal apple.name, citibank.firm_name
end
def test_eager_loading_with_primary_key
apple = Firm.create("name" => "Apple")
citibank = Client.create("name" => "Citibank", :firm_name => "Apple")
citibank_result = Client.find(:first, :conditions => {:name => "Citibank"}, :include => :firm_with_primary_key)
assert_not_nil citibank_result.instance_variable_get("@firm_with_primary_key")
end
def test_no_unexpected_aliasing
first_firm = companies(:first_firm)
another_firm = companies(:another_firm)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册