首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Ruby中使用常量映射

如何在Ruby中使用常量映射
EN

Stack Overflow用户
提问于 2017-02-15 17:40:03
回答 5查看 1.2K关注 0票数 1

我试图使用一个已经定义的常量来映射一个自定义值数组。我遇到了一些问题。

这是非常有效的:

代码语言:javascript
复制
Car.where(brand: car_brands.map(&:Car_honda))

虽然我已经在我的文件中定义了所有的汽车品牌,所以我更喜欢使用常量而不是重写名称。例如:

代码语言:javascript
复制
HONDA = "Car_honda"

当我试图将这个常量映射到数组时,它似乎不能正常工作:

代码语言:javascript
复制
Car.where(brand: car_brands.map(&:HONDA))

我试图在map中使用一个块,但仍然得到了相同的结果:

代码语言:javascript
复制
Car.where(brand: car_brands.map {|c| c.HONDA}))

我们能在map中使用常量吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-02-15 17:46:52

只需使用send

代码语言:javascript
复制
Car.where(brand: car_brands.map { |c| c.send(HONDA) })
票数 4
EN

Stack Overflow用户

发布于 2017-02-15 20:18:27

我不知道您将从何而来,或者确切地说您是从哪里来的,但是下面是一个遵循Rails惯例的示例:

代码语言:javascript
复制
class Brand < ActiveRecord::Base
  has_many :cars
end

class Car < ActiveRecord::Base
  belongs_to :brand
end

然后你可以找到所有与“本田”品牌相关的汽车:

代码语言:javascript
复制
Brand.find_by(name: 'Honda').cars

或者使用JOIN操作查找所有匹配一个或多个任意品牌名称的汽车:

代码语言:javascript
复制
Car.joins(:brand).where(brand: { name: %w[ Honda Ford ] })

如果您遵循Rails中的流程,事情就会容易得多。

票数 1
EN

Stack Overflow用户

发布于 2017-02-15 17:43:26

您能在map中使用常量吗?

不是的。无论如何,不是这样的。

car_brands.map { |c| c.HONDA }

这意味着,对于car_brands中的每一件事,都调用方法 HONDA并返回调用的结果。因此,除非您定义了方法HONDA (绝对不应该),否则就没有机会工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42256474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档