2012-04-15 44 views
0

我有我认为是非标准模型结构(我知道它是坏的,但它的必要条件)。鉴于以下迁移:使用非id列查询数据库

create_table :MODELS, :primary_key => :MOD_ID do |t| 
    t.integer :MOD_ID 
    t.integer :MOD_MFA_ID 
    t.integer :MOD_CDS_ID 
    t.integer :MOD_PCON_START 
    t.integer :MOD_PCON_END 
    t.integer :MOD_PC 
    t.integer :MOD_CV 
    t.integer :MOD_AXL 
    t.binary :MOD_PC_CTM 
    t.binary :MOD_CV_CTM 

    t.timestamps 

MOD_MFA_ID对应于关联到另一台/模型(manufacturers)。我想根据制造商的品牌栏检索模型。

def getmanufacturer 
    @manufacturer = Manufacturers.find(params[:manufacturer]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @manufacturer } 
    end 
    end 

我想不出如何修改我的控制器和路由来处理这个用例。我想用这种或URL查询应用:/models?manufacturer=audi&&model=a6

回答

3

所以说你要像一个网址:

/制造/奥迪/模型/ A6

在你的路由文件

做:

resources manufactures do 
    resources models 
end 

对于你想切换主键

制造商模型的模型:

set_primary_key :manufacturer_name #what ever you want used instead of ID 

做同样的事情为你的模型模型

set_primary_key :MOD_Name 

然后在你的控制器,你可以这样做:

Manufacturer.find(params[:manufaturer_id]).models.find(params[:id]) 

如果你不想切换主键,你也可以做find_by:

Manufacturer.find_by_manufacturer_name("Audi").models.find_by_model_name("a6") 
+0

这是很好的,但在第一步,我在模型set_primary_key“MFA_ID”,但在控制器中,我想通过MFA_ID找到,但是对于MOD_Name?编辑:对不起)我真的很愚蠢))这是不好的学习18/7 – byCoder 2012-04-15 18:52:33

+0

你可以使用find_by方法。所以尝试.find_by_mod_name(“a6”) – 2012-04-15 18:54:35

+0

好的)))我发现了 – byCoder 2012-04-15 18:55:29

0

如果你有一个迁移并且正在创建一个新的数据库,t如果你应该制作一个标准的分贝。我知道你是否连接到你无法设计的数据库。我也使用小写字段名称。

如果你想让MFA_BRAND成为主键,那么你可以在你的类中设置主键。假设你想MFA_ID是主键,那么你将你的类添加为:

class Model < ActiveRecord::Base 
    set_primary_key "MFA_ID" 
end 

这将改变查找和to_param方法来使用你的主键字段。

但是,假设您不想更改主键,但有时希望通过MFA_BRAND进行搜索,那么您将希望将MFA_BRAND值作为CGI参数传递。首先设置德路为

resources :models do 
    collection do 
    get :getmanufacturer 
    end 
end 

当你需要的路径助手这样调用它:

getmanufacturer_models_path(:manufacturer => "Acme") 

的URL会

/models/getmanufacturer?manufacturer=Acme 
+0

他已经说明了它有必要有一个非标准的数据库。通常情况下,数据库在多个应用程序之间共享。问题是如何处理这个限制。 – 2012-04-15 18:59:31

+1

我确实给了他一个处理非标准数据库的解决方案。我看到他正在使用迁移,这让我认为他有一定的自由来控制*他的数据库和翻译。但是,如果他真的没有,我仍然给他一个解决方案。 – 2012-04-15 19:07:52