【发布时间】:2015-03-12 20:25:01
【问题描述】:
假设我们有一个代码:
型号:
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
这样,如果我从DogsController 继承PetsController,它仍然可以工作,而无需在DogsController 中定义单独的索引。但也许还有其他更巧妙的解决方案。
【问题讨论】:
-
所以...您想在对象上调用方法...而不知道对象是什么?对不起,我不明白,你得再解释一下。我的意思是,您可以将模型分配给一个变量(本质上是对象指针)并在其上调用一个方法。那是你要的吗?必须有人知道
self.model是什么。 -
对不起,这个例子是错误的,我当然不是指实例方法,而是类方法。
标签: ruby-on-rails ruby