我正在开发一个拼车应用程序,用户可以在其中添加电梯,并能够为每个电梯选择多个停靠站(通过c,d,e从A到B)。现在,当用户在数据库中搜索提升时,结果还应包括“ A到d”,“ c到B”或“ c到e”之类的提升。
我使用下面的代码在Rails 2.3.5中工作,但是很难将其移至Rails3。我敢肯定,必须有一种更干净的方法来实现我要执行的操作并将一些代码移至模型。

如果有人可以帮助我,那将是很棒的。

class Lift < ActiveRecord::Base
  has_many :stops
end

class Stop < ActiveRecord::Base
  belongs_to :lift
  belongs_to :city
end

class City < ActiveRecord::Base
  has_one :stop
end


@lifts = Lift.find(
  :select =>     "lifts.id, bs.city_id as start_city_id, bs2.city_id as destination_city_id",
  :from =>       "lifts",
  :joins =>      "LEFT JOIN stops bs ON lifts.id = bs.lift_id
                  LEFT JOIN stops bs2 ON lifts.id = bs2.lift_id
                  JOIN cities bc ON bs.city_id = bc.id
                  JOIN cities bc2 ON bs2.city_id = bc2.id",
  :include =>    [:stops, :cities],
  :conditions => "bs.lift_id = bs2.lift_id AND bs.position < bs2.position"
                  #uses the position attribute to determine the order of the stops
)

最佳答案

我知道这是一个非常简单的答案,但是为什么不使用这些选项在模型中创建范围呢?

10-07 22:11