我试图使用一个已经定义的常量来映射一个自定义值数组。我遇到了一些问题。
这是非常有效的:
Car.where(brand: car_brands.map(&:Car_honda))虽然我已经在我的文件中定义了所有的汽车品牌,所以我更喜欢使用常量而不是重写名称。例如:
HONDA = "Car_honda"当我试图将这个常量映射到数组时,它似乎不能正常工作:
Car.where(brand: car_brands.map(&:HONDA))我试图在map中使用一个块,但仍然得到了相同的结果:
Car.where(brand: car_brands.map {|c| c.HONDA}))我们能在map中使用常量吗?
发布于 2017-02-15 17:46:52
只需使用send
Car.where(brand: car_brands.map { |c| c.send(HONDA) })发布于 2017-02-15 20:18:27
我不知道您将从何而来,或者确切地说您是从哪里来的,但是下面是一个遵循Rails惯例的示例:
class Brand < ActiveRecord::Base
has_many :cars
end
class Car < ActiveRecord::Base
belongs_to :brand
end然后你可以找到所有与“本田”品牌相关的汽车:
Brand.find_by(name: 'Honda').cars或者使用JOIN操作查找所有匹配一个或多个任意品牌名称的汽车:
Car.joins(:brand).where(brand: { name: %w[ Honda Ford ] })如果您遵循Rails中的流程,事情就会容易得多。
发布于 2017-02-15 17:43:26
您能在map中使用常量吗?
不是的。无论如何,不是这样的。
car_brands.map { |c| c.HONDA }
这意味着,对于car_brands中的每一件事,都调用方法 HONDA并返回调用的结果。因此,除非您定义了方法HONDA (绝对不应该),否则就没有机会工作了。
https://stackoverflow.com/questions/42256474
复制相似问题