0

根据

耙路线

我有这样的路线

types_model GET /types/model(.:format) types#model

我有这样的方法:

def model
  @models = Model.find(:all, :conditions => { :MOD_MFA_ID => params[:model]})
end

而这样的观点:

- @manufacturers.each do |manufacturer|
    %li      
      = link_to manufacturer.MFA_BRAND, :controller => "types", :method => "model", :model => "111"

但是如何使用链接将参数发送到方法“模型”?例如: localhost/types/model/111 ?那么rails服务器工作正常吗?(现在它让我知道我没有这样的路线)

4

3 回答 3

4

考虑将模型方法命名为“show”,URL 将是 /types/111。这将使您的代码 RESTful

于 2012-08-06T15:14:25.943 回答
1

如果您需要将方法保留到您的路线,请添加此选项。

match "/types/model/:model" => "types#model"
于 2012-08-06T15:34:31.950 回答
1

有几种可能性,最重要的是将您的应用程序保持在 RESTful 干净的模型中(它将为您节省大量时间)。

首先,您应该真正正确地定义您的模型:

  • 你认为那一种类型是不同的模型吗?
  • 您是否认为模型位于“目录”下?
  • 你认为模型是类型对象的函数吗?
  • 你认为模型是对象类型的全局函数吗?

模型作为类型的嵌套资源

在这种情况下,您认为一个类型实例有多个模型实例(就像一个公司可以有用户)。所以你应该有两个 restful 控制器:一个用于模型,一个用于类型。

您可以像这样定义这样的路线:

resources :types do
   resources :models
end

转到/types/14/model/1时,将调用模型控制器中的 RESTful 方法,type_id 为 14,id 为 1。

关于你的问题,我认为这是最干净的方法。

类型命名空间中的模型

在这种情况下,模型方法将包含在类型命名空间中,但控制器仅用于处理模型对象。

namespace :types do
  resources :models
end

它将允许您调用/types/models/1来调用模型控制器的显示功能。

模型方法作为类型实例的方法

在这种情况下,模型方法是类型实例的函数:

resources :types do
   member do
      :model
   end
end

id = 42请求/types/42/model时会调用类型控制器的方法函数

模型方法作为类型的全局方法

在这种情况下,模型方法是全局类型类的全局方法

resources :types do
   collection do
      :model
   end
end

在这种情况下,类型控制器的模型方法将在/types/model被请求时被调用。

一切都在这里解释。

于 2012-08-06T15:38:44.180 回答