Mitchell Gould
2009-Oct-26 16:39 UTC
Trouble getting child table information based on locale
I have two tables
manufacturers manuf_details (details are in several languages)
id id
name manufacturer_id
. details
. locale
.
I have two models
Manufacturer Manuf_details
has_one :manuf_detail belongs_to :manufacturer
I want to get all the info from the manufacturers table and the details
from the manuf_details table for a specific locale and manufacturer.
In the controller I have the following:
@manufacturer = Manufacturer.find(:first, :conditions => {:id =>
params[:id]})
In the view I have the following
<%= @manufacturer.name %>
<%= @manufacturer.manuf_detail.details%>
Rails automatically generates the sql to get the info from the details
table for the view as in:
SELECT * FROM `manuf_descriptions` WHERE
(`manuf_descriptions`.manufacturer_id = 4) LIMIT 1
But what I need is it to generate the following:
SELECT * FROM `manuf_descriptions` WHERE
(`manuf_descriptions`.manufacturer_id = 4AND
''manuf_descriptions''.locale
= ''EN'') LIMIT 1
Or if the user selected say FRENCH it would be
SELECT * FROM `manuf_descriptions` WHERE
(`manuf_descriptions`.manufacturer_id = 4AND
''manuf_descriptions''.locale
= ''FR'') LIMIT 1
I tried to do a join as in the following:
find(:first, :joins => :manuf_description, :conditions => {:id =>
manufacturer_id, :manuf_descriptions => {:locale => I18n.locale}})
however this does not help because the line
<%= @manufacturer.manuf_detail.details%> in the view still gets
generated by rails into
SELECT * FROM `manuf_descriptions` WHERE
(`manuf_descriptions`.manufacturer_id = 4) LIMIT 1
How can I solve this?
Thank you in advance
--
Posted via http://www.ruby-forum.com/.