7

这真让我抓狂!我有两个模型LionCheetah. 两者都继承自Wildcat.

class Wildcat < ActiveRecord::Base; end
class Lion < Wildcat; end
class Cheetah < Wildcat; end

这里使用 STI。

它们都通过控制器进行处理WildcatsController。在那里,我有一个从 the和所有其他东西中before_filer获取wildcat 以使用正确的类。typeparams[:type]

在我的routes.rb中,我创建了以下路线:

resources :lions, controller: 'wildcats', type: 'Lion'
resources :cheetahs, controller: 'wildcats', type: 'Cheetah'

如果我现在想使用从路线(lions_pathlion_pathnew_lion_path等)中获得的路径助手,那么一切都按预期工作,除了shownew路径。例如lions_path返回路径/lionsnew路径/lions/new?type=Lion返回。与show路径相同。当我尝试进入/lions/new我的根域时,它会在后台正确添加类型参数。

所以,我的问题是,如果我使用路径帮助器,为什么 Rails 会将type参数添加到 url?为什么只为newand show

我正在使用全新的 Rails 应用程序运行带有 Ruby 2.0 的 Rails 4.0.0。

4

2 回答 2

7

为什么使用type?为什么不使用继承的控制器?

resources :lions
resources :cheetahs

然后

class LionsController < WildCatsController
end

class CheetahController < WildCatsController
end

class WildCatsController < ApplicationController
  before_filter :get_type

  def index
    @objs = @klass.scoped
  end

  def show
    @obj  = @klass.find(params[:id])
  end

  def new
    @obj  = @klass.new
  end

  # blah blah

  def get_type
    resource = request.path.split('/')[0]
    @klass   = resource.singularize.capitalize.constantize
  end
于 2013-09-23T15:41:57.760 回答
-3

我刚遇到这个问题。您可以尝试关闭服务器,删除 /tmp 目录并重新启动。

Rails 路线和控制器参数

于 2013-11-14T18:34:36.347 回答