假设我们有一个代码:
型号:
class Dog < ActiveRecord::Base
def self.make_noise
puts 'bow-wow'
end
end
控制器:
class DogsController < ApplicationController
def index
Dog.make_noise
end
end
这会有效,但我更愿意编写控制器index
方法代码,例如:AssociatedModel.make_noise
或Model.make_noise
在Rails中是否可以调用关联的模型方法而不在代码中使用其类名?
如果我想使用继承并且让PetsController成为所有宠物的基础(或者每个适用的控制器都包含PetNoise Concern)并声明索引方法,那么这将非常有用。
我不确定我是否已经解释得这么好了。
行。单向(我不喜欢)就是这样编写PetsController
方法:
def index
params[:controller].classify.constantize.make_noise
end
这样,如果我从PetsController
继承DogsController
,它仍然可以在DogsController
内定义单独的索引的情况下继续工作。但也许还有其他更简洁的解决方案。
答案 0 :(得分:1)
正如我在this answer中所解释的那样,您可以使用params[:controller]
来确定模型。像这样:
params[:controller] # => "dogs"
params[:controller].classify # => "Dog"
因此,您可以编写索引操作&#34;通常&#34;像这样:
def index
model_class = params[:controller].classify.constantize
model_class.make_noise
end