Rails 中的 map(&:id) 是什么?
What is map(&:id) in Rails?
我的问题不是错误,是为了理解。由于我是 Rails 的新手,我还不能阅读所有代码。
(&:id)
在.map
之后做什么
@user_cnae_classifications = user.cnae_classifications.map(&:id)
.map
有和没有的区别是什么?
在此方法中调用:
UserCnaeClassification.create(
user: @user,
cnae_classification_id: id
)
我如何阅读那部分代码...
user: @user,
cnae_classification_id: id
它们是键和值吗?
1)
您应该阅读 map
上的一些教程以熟悉。
https://www.rubyguides.com/2018/10/ruby-map-method
但简短的回答是 运行 user.cnae_classifications.map(&:id)
将遍历所有 cnae_classifications
并从中提取 id
并将它们全部放入一个数组中。 &
字符允许 map
shorthand 避免传递整个块。
来自上面的link:
2)
#create
方法可以接受已知属性的 key-value 散列(所讨论的 class 已知,在本例中为 UserCnaeClassification
)以在创建时分配。所以你基本上是对的,它们是 key-value 对,但它们特定于此 class/object。这些相同的键可能不适用于另一个 class/object。
补充阅读:https://guides.rubyonrails.org/active_record_basics.html#create
.map(&:id)
是 .map { |x| x.id }
的较长形式的 shorthand。
- what does (&:id) do after .map
语法 map(&:method)
等同于:
object.map do |i|
i.method
end
完整的解释是&
运算符用于将任何响应to_proc
的Ruby对象转换为Proc
,封装了一段代码.在这种情况下,Symbol
对象 (:id
) 被转换为上面的代码块。
如果您有兴趣了解更多,请注意这是 纯 Ruby,而不是 Rails-specific。 Check the documentation for Proc
.
- In this method call:
How do I read that part of the code...
are they keys and values?
这些是关键字参数。这是一种命名方法参数的方法,可以明确告诉 reader 每个值应该是什么。请注意,接受散列作为关键字参数的方法的行为已被弃用,as seen in this official post.
一些有趣的事情要说:如果您正在使用数据库(ORM - ActiveRecord),您会发现编写 map(&:id) 可能会有所帮助。还有一种叫做 pluck 的方法,它可以做类似的事情,但速度要快一些。
用法:
另外 pluck 不适用于常规数组。
我的问题不是错误,是为了理解。由于我是 Rails 的新手,我还不能阅读所有代码。
之后做什么(&:id)
在.map
@user_cnae_classifications = user.cnae_classifications.map(&:id)
.map
有和没有的区别是什么?在此方法中调用:
UserCnaeClassification.create( user: @user, cnae_classification_id: id )
我如何阅读那部分代码...
user: @user, cnae_classification_id: id
它们是键和值吗?
1)
您应该阅读 map
上的一些教程以熟悉。
https://www.rubyguides.com/2018/10/ruby-map-method
但简短的回答是 运行 user.cnae_classifications.map(&:id)
将遍历所有 cnae_classifications
并从中提取 id
并将它们全部放入一个数组中。 &
字符允许 map
shorthand 避免传递整个块。
来自上面的link:
2)
#create
方法可以接受已知属性的 key-value 散列(所讨论的 class 已知,在本例中为 UserCnaeClassification
)以在创建时分配。所以你基本上是对的,它们是 key-value 对,但它们特定于此 class/object。这些相同的键可能不适用于另一个 class/object。
补充阅读:https://guides.rubyonrails.org/active_record_basics.html#create
.map(&:id)
是 .map { |x| x.id }
的较长形式的 shorthand。
- what does (&:id) do after .map
语法 map(&:method)
等同于:
object.map do |i|
i.method
end
完整的解释是&
运算符用于将任何响应to_proc
的Ruby对象转换为Proc
,封装了一段代码.在这种情况下,Symbol
对象 (:id
) 被转换为上面的代码块。
如果您有兴趣了解更多,请注意这是 纯 Ruby,而不是 Rails-specific。 Check the documentation for Proc
.
- In this method call: How do I read that part of the code... are they keys and values?
这些是关键字参数。这是一种命名方法参数的方法,可以明确告诉 reader 每个值应该是什么。请注意,接受散列作为关键字参数的方法的行为已被弃用,as seen in this official post.
一些有趣的事情要说:如果您正在使用数据库(ORM - ActiveRecord),您会发现编写 map(&:id) 可能会有所帮助。还有一种叫做 pluck 的方法,它可以做类似的事情,但速度要快一些。
用法: