我认为这是一个非标准的模型结构(我知道它很糟糕,但它是必要的)。鉴于以下迁移:
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
我无法弄清楚如何修改我的控制器和路由来处理这个用例。我想使用此类或网址查询应用:/models?manufacturer=audi&&model=a6
答案 0 :(得分: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")
答案 1 :(得分: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