这让我抓狂!我有两个模型Lion
和Cheetah
。两者均继承自Wildcat
。
class Wildcat < ActiveRecord::Base; end
class Lion < Wildcat; end
class Cheetah < Wildcat; end
此处使用STI。
它们都通过控制器WildcatsController
处理。在那里,我有一个before_filer
从type
获取野猫的params[:type]
以及所有其他东西来使用正确的类。
在我的routes.rb
中,我创建了以下路线:
resources :lions, controller: 'wildcats', type: 'Lion'
resources :cheetahs, controller: 'wildcats', type: 'Cheetah'
如果我现在想要使用路径助手,我从路线(lions_path
,lion_path
,new_lion_path
等)获得,一切都按预期工作,除了show
和new
路径。例如,lions_path
会返回路径/lions
。 new
路径返回/lions/new?type=Lion
。与show
路径相同。当我尝试将/lions/new
输入到我的根域时,它会在后台正确添加类型参数。
所以,我的问题是,如果我使用路径助手,为什么Rails会将type
参数添加到网址?为什么只针对new
和show
?
我使用新的Rails应用程序使用Ruby 2.0运行Rails 4.0.0。
答案 0 :(得分: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
答案 1 :(得分:-2)
我刚遇到这个问题。您可以尝试关闭服务器,删除/ tmp目录并重新启动。