Martin Kufner
2013-May-19 18:46 UTC
Rev 3.2.13 has_one relation with :foreign_key set to a method
Hey, I found in the documentation about has_one *":primary_key Specify the method that returns the primary key used for the association. By default this is id."* My interpretation is that when I have a method in the model, I can point :foreign_key to this method has_one :participants_group, :class_name => "Group::Virtual::Participants", :foreign_key => :id, :primary_key => :participants_group_id, :dependent => :destroy, :inverse_of => :topic private def participant_group_id # the result of this method should be taken as a foreign_key value in the query. # IMHO Query should be: SELECT "groups".* FROM "groups" WHERE "groups"."type" IN (''Group::Virtual::Participants'') AND "groups"."id" = 1 LIMIT 1 1 end Instead the query is SELECT "groups".* FROM "groups" WHERE "groups"."type" IN (''Group::Virtual::Participants'') AND "groups"."id"* IS NULL *LIMIT 1 In ActiveRecord::Associations::AssociationScope#add_constraints line 70 there is scope = scope.where(table[key].eq(*owner[foreign_key]*)) Which I think is wrong according to the documentation, because it just accesses attributes To match the documentations iit shoud rather be scope = scope.where(table[key].eq(*owner.send foreign_key*)) Please tell me which should be true Documentation or Code, and please either change the line, or the documentation. Thanks Martin. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-core+unsubscribe@googlegroups.com. To post to this group, send email to rubyonrails-core@googlegroups.com. Visit this group at http://groups.google.com/group/rubyonrails-core?hl=en. For more options, visit https://groups.google.com/groups/opt_out.