Hia*_*nho 7 ruby routes ruby-on-rails sti ruby-on-rails-4
这真让我抓狂!我有两个型号Lion和Cheetah.两者都继承自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,等),一切工作正常,除了show和new路径.例如,lions_path返回路径/lions.该new路径返回/lions/new?type=Lion.与show路径相同.当我尝试进入/lions/new我的根域时,它正确地在后台添加了类型参数.
所以,我的问题是,type如果我使用路径助手,为什么Rails会将参数添加到url?为什么只为new和show?
我正在使用一个新的Rails应用程序使用Ruby 2.0运行Rails 4.0.0.
为何使用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)
| 归档时间: |
|
| 查看次数: |
2420 次 |
| 最近记录: |