我正在使用连接查询来获取另一个表的属性以及查询。
city = City.first(:select => "cities.*, states.name as state_name, states.time as state_time"
:joins => "LEFT JOIN states on cities.state_id = states.id",
:conditions => ["states.name = ?", params[:state]])
这里的问题是,当我从city.state_time
这样的联接表中获取值时,我将获得类似2010-11-12 05:00:00
的字符串而不是时间对象(Rails没有对这些进行类型转换)字段)。这是有道理的,因为我正在调用City模型,并且用于类型转换时间列的方法将在State模型中。我将不得不明确地解析这样的时间,并且还必须与时区问题作斗争。 (因为Rails在给出Time对象时会进行一些自定义,我将不得不为这些列执行这些操作)。有没有办法在进行连接时将列链接到State。我想到的一种方法是这样的。
state = State.new(:name => city.state_name, :time => city.state_time)
并使用state.name
和state.time
。还有更好的方法吗?
答案 0 :(得分:1)
这可能是你想要的:
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
这可以使用内连接并具有一些条件:
Rails 2语法
a = City.find(:all, :conditions => ['states.name = ?', params[:state]], :joins => :state, :include => :state)