Here is my weird problem.
Two models like following:

Lexeme
id:int
name:string

Structure
id:int
ref_id:string
meta_id:int

Lexeme can have many structure records through foreign key 'ref_id' in
the structures table.
And these structure records belonging to one lexeme differs between
each other using meta_id.
And if Lexeme has structures, then there must be a top_struct whose
structure.id is 0.
This is the association I specified.

class Lexeme
 
has_one :top_struct, :class=>'Structure', :foreign_key=>'ref_id', 
:conditions=>'structures.meta_id=0'
  has_many: all_structs, :class=>'Structure', :foreign_key=>'ref_id'
end

class Structure
  belongs_to :lexeme, :class=>'Lexeme', :foreign_key=>'ref_id'
end

After these definition, say I want to find 'those lexemes that have
structures when structures.id <10'.
I tried the following two find

Lexeme.find
(:all, :include=>:top_struct, :conditions=>'structures.id<10')
Lexeme.find
(:all, :include=>:all_structs, :conditions=>'structures.id<10')

Then finds gives out same error
For the first one
ActiveRecord::StatementInvalid: Mysql::Error: Unknown column
'lexemes.ref_id' in 'field list':
SELECT `lexemes`.`id` AS t0_r0,
                `lexemes`.`name` AS t0_r1,
                `lexemes`.`ref_id` AS t0_r2,
                `lexemes`.`meta_id` AS t0_r3,
                `structures`.`id` AS t1_r0,
                `structures`.`ref_id` AS t1_r1,
                `structures`.`meta_id` AS t1_r2,
FROM `lexemes`  LEFT OUTER JOIN `structures` ON structures.ref_id =
lexemes.id and structures.meta_id=0
WHERE (structures.id<10)

For the second one
ActiveRecord::StatementInvalid: Mysql::Error: Unknown column
'lexemes.ref_id' in 'field list':
SELECT `lexemes`.`id` AS t0_r0,
                `lexemes`.`name` AS t0_r1,
                `lexemes`.`ref_id` AS t0_r2,
                `lexemes`.`meta_id` AS t0_r3,
                `structures`.`id` AS t1_r0,
                `structures`.`ref_id` AS t1_r1,
                `structures`.`meta_id` AS t1_r2,
FROM `lexemes`  LEFT OUTER JOIN `structures` ON structures.ref_id =
lexemes.id
WHERE (structures.id<10)

Apparently, my 'lexemes' table dose not have 'ref_id' and 'meta_id'
field.
And I'm using rails 2.2.2

But when I change the 'conditions' field to conditions on lexemes
table, everything goes fine.
Lexeme.find(:all, :include=>:top_struct, :conditions=>'lexemes.id<10')
Lexeme.find
(:all, :include=>:all_structs, :conditions=>'lexemes.id<10')

Can anyboby please explain to me why this is happening?
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to