Rails活动模型关联问题

时间:2011-11-24 02:25:00

标签: mysql sql ruby-on-rails ruby activerecord

我遇到了模型关联的问题。我想通过访问 trips.route_id 中的数据来提取路线的旅行信息,其中 routes.route_id 将是相同的值。目前,SQL查询调用 routes.id ,而不是使用 routes.route_id 。任何帮助将不胜感激。

路线表结构

COLUMNS: id,route_id,route_short_name,route_long_name,route_desc,route_type  
ROW: 1,2-36,2,"East 34th St",,3

此表上的primary_key是'id'。

模型

class Route < ActiveRecord::Base
  has_many :trips, :foreign_key => 'route_id'
end
class Trip < ActiveRecord::Base
  belongs_to :route
end

路径控制器

class RouteController < ApplicationController
  def show
    @route = Route.where("'%s' = routes.route_short_name",params[:id]).first
  end
end

想致电@route.trips以提取与trip相关的@route个信息

LOG INFO

Started GET "/route/19" for 127.0.0.1 at Wed Nov 23 21:09:55 -0500 2011
Processing by RouteController#show as HTML
Parameters: {"id"=>"19"}
Route Load (0.4ms)  SELECT `routes`.* FROM `routes` WHERE ('19' = routes.route_short_name) LIMIT 1
Trip Load (8.4ms)  SELECT `trips`.* FROM `trips` WHERE `trips`.`route_id` = 15

Trip Trip说明: 15表示从“路径加载”查询返回的对象的id。我想使用结果的routes.route_id值而不是id来构建“Trip Load”查询。

期望的结果:
 Trip Load (8.4ms) SELECT 'trips'.* FROM 'trips' WHERE 'trips'.'route_id' = '2-36''2-36'值从路由表结构示例中引用)

1 个答案:

答案 0 :(得分:1)

如果我理解您的问题,您需要将模型更改为以下内容:

class Route < ActiveRecord::Base
  has_many :trips, :primary_key => "route_id"
end

class Trip < ActiveRecord::Base
  belongs_to :route, :primary_key => "route_id"
end