Rails 4.0中的路由,路径助手和STI

Hia*_*nho 7 ruby routes ruby-on-rails sti ruby-on-rails-4

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

class Wildcat < ActiveRecord::Base; end
class Lion < Wildcat; end
class Cheetah < Wildcat; end
Run Code Online (Sandbox Code Playgroud)

STI在这里使用.

它们都通过控制器处理WildcatsController.在那里,我有一个before_filer得到type野猫从params[:type]和所有其他的东西来使用正确的类.

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

resources :lions, controller: 'wildcats', type: 'Lion'
resources :cheetahs, controller: 'wildcats', type: 'Cheetah'
Run Code Online (Sandbox Code Playgroud)

如果我现在想用的路径帮手,我从路线(得到lions_path,lion_path,new_lion_path,等),一切工作正常,除了shownew路径.例如,lions_path返回路径/lions.该new路径返回/lions/new?type=Lion.与show路径相同.当我尝试进入/lions/new我的根域时,它正确地在后台添加了类型参数.

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

我正在使用一个新的Rails应用程序使用Ruby 2.0运行Rails 4.0.0.

Bil*_*han 7

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

resources :lions
resources :cheetahs
Run Code Online (Sandbox Code Playgroud)

然后

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
Run Code Online (Sandbox Code Playgroud)