class Recipe < ActiveRecord::Base
def self.by_title_and_description(title, description)
#logic for method redacted
end
end
为了称呼这种方法:
Recipe.by_title_and_description(title, description)
但是我想知道是否有办法这样做,因为我的方法返回多个实例。
Recipes.by_title_and_description(title, description)
因为它看起来更直观。 没什么大不了的,但我只是好奇。
答案 0 :(得分:3)
如果你真的敢用这种风格的Rails编程,你可以写
Recipes = Recipe
定义了Recipe类的另一个常量名称。
答案 1 :(得分:1)
它违反了Rails模型命名约定。 使用finder方法的常见情况是复数(或不)变量名。 这样的事情。
@recipes = Recipe.mutliple_by_title_and_description(title, description) # return multiple instances
@recipe = Recipe.by_title_and_description(title, description) # return one instance
我不喜欢这种编程风格,但你可以继承类来做它。
class Recipes
def self.by_title_and_description(title, description)
# logic to return multiple instances
end
end
class Recipe < Recipes
def self.by_title_and_description(title, description)
super.first # this will return first instance from parent method
end
end
至于我,它使代码的可读性更低,更“臭”。
答案 2 :(得分:0)
一种方法是:
class Recipes < Recipe
end
Recipes.by_title_and_description(title, description)
这使得它毫无用处。
更多方法:
define_method("Recipes") do
Recipe
end
instance_eval('self.Recipes.by_title_and_description("title", "description")')
send("Recipes").by_title_and_description("title", "description")
当然不会使用其中任何一种,但我发现所有这些都非常有趣。