0

我有我认为的非标准模型结构(我知道它很糟糕,但它是必要的)。鉴于以下迁移:

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

4

2 回答 2

3

所以说你想要一个像这样的网址:

/制造/奥迪/型号/a6

在您的路线文件中执行以下操作:

resources manufactures do
  resources models
end

对于您想要切换主键的模型

制造商型号:

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

为您的 MODEL 模型做同样的事情

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")
于 2012-04-15T18:45:23.547 回答
0

如果您有迁移并正在创建一个新数据库,那么您应该创建一个标准数据库。我了解您是否连接到无法设计的数据库。我也会使用小写的字段名称。

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

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

这将更改 find 和 to_param 方法以使用您的主键字段。

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

resources :models do
  collection do
    get :getmanufacturer
  end
end

当您需要路径助手时,请以这种方式调用它:

getmanufacturer_models_path(:manufacturer => "Acme")

网址将是

/models/getmanufacturer?manufacturer=Acme
于 2012-04-15T18:55:22.483 回答