Hello all,
Since nobody answered the letter below in rubyonrails-talk, I’ve taken the courage to repost it here.
I looks like a bug, but I just refuse to believe it as it is such a basic functionality of Active Record.
Hello all,
Since nobody answered the letter below in rubyonrails-talk, I’ve taken the courage to repost it here.
I looks like a bug, but I just refuse to believe it as it is such a basic functionality of Active Record.
Hello all,
Since nobody answered the letter below in rubyonrails-talk, I've taken the courage to repost it here. I looks like a bug, but I just refuse to believe it as it is such a basic functionality of Active Record.
It does seem strange. Can you reproduce the bug in the active record tests? If so you can open a trac ticket and we can take a look at it.
Hi, I think I have a related problem (that I was about to post)
...
I have the following problem With a legacy Database:
class User < ActiveRecord::Base set_table_name :jos_users
has_many :orders has_many :order_items, :through => :orders end
class Order < ActiveRecord::Base set_table_name :jos_vm_orders set_primary_key :order_id
has_many :order_items belongs_to :user end
class OrderItem < ActiveRecord::Base set_table_name :jos_vm_order_item set_primary_key :order_item_id
belongs_to :order end
When I try to get all order items for a specific user I get an error:
u=User.find(63).order_items
ActiveRecord::StatementInvalid: Mysql::Error: Unknown column 'jos_vm_orders.order_item_id' in 'on clause': SELECT jos_vm_order_item.* FROM jos_vm_order_item INNER JOIN jos_vm_orders ON jos_vm_order_item.order_id = jos_vm_orders.order_item_id WHERE ((jos_vm_orders.user_id = 63)) from /var/lib/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/abstract_adapter.rb:150:in `log'
I don't understand why rails is trying to get jos_vm_orders.order_item_id instead of jos_vm_orders.order_id, since the primary key of orders table os order_id.
Can somebody help.
Tahnks, Cláudio Caseiro
Hi, I think I have a related problem (that I was about to post)
...
I have the following problem With a legacy Database:
class User < ActiveRecord::Base set_table_name :jos_users
has_many :orders
You need to add the option :foreign_key => "order_id"
so has_many :orders, :foreign_key => "order_id"
With that foreign_key I still have the problem, but I don't think I need any foreign_key. I'm in class User, so if I need any foreign_key in a has_many association it would be :user_id, but since that is the default I don't need any.
I think the problem is that the join is using the primary_key defined in the OrderItem class for the order table, what is not correct. I changed that to "set_primary_key :foo" and I get
ActiveRecord::StatementInvalid: Mysql::Error: Unknown column 'jos_vm_orders.foo' in 'on clause': SELECT `jos_vm_order_item`.* FROM `jos_vm_order_item` INNER JOIN jos_vm_orders ON jos_vm_order_item.order_id = jos_vm_orders.foo WHERE ((`jos_vm_orders`.user_id = 63))
Any help? Thanks, Claudio Caseiro
Rick Denatale wrote:
Can you test whether you have the same problems if you change your database to use the standard Rails naming scheme, i.e. so that you don't have to use any of the table_name, set_primary_key etc. methods? I'm not suggesting that you'd have to do it in your actual product, but it could help figuring out whether some of them is breaking the scheme.
//jarkko