开发者

Data from joined tables not typecast

I am using a join query to get the attributes of another table along with the query.

city = City.first(:select => "cities.*, states.name as state_name, states.time as state_time"
         开发者_StackOverflow社区         :joins => "LEFT JOIN states on cities.state_id = states.id",
                  :conditions => ["states.name = ?", params[:state]])

Here, the problem is that when I get the values from the joined tables like city.state_time, I will get the string like 2010-11-12 05:00:00 instead of the time object(no typecasting is done by Rails for these fields). It makes sense since I am calling City model and the methods used for typecasting time column will be in State model. I will have to explicitly parse time like this and will have to fight with the time zone issues as well. (as Rails do some customizations while giving the Time object and I will have to do these for these columns). Is there any way to link the columns to the State while doing the join. One method I thought of was like this.

state = State.new(:name => city.state_name, :time => city.state_time)

and use state.name and state.time. Is there a better way?


here's probably what you want:

class City < ActiveRecord::Base
  belongs_to :state
end

class State < ActiveRecord::Base
  has_many :cities
end

a = City.joins(:state).includes(:state).where(['states.name = ?', params[:state]]).first
a.state.time

This works using an inner join and has some conditions:

  • City must belong to only one state. If the city doesn't belong to any state the query won't return it because of the inner join

Rails 2 Syntax

a = City.find(:all, :conditions => ['states.name = ?', params[:state]], :joins => :state, :include => :state)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜