从 Ruby 2 的文档看两个方法是一样的。但是实际使用中不是这样
class OptionValue < ActiveRecord::Base
belongs_to :option_type, touch: true, inverse_of: :option_values
has_and_belongs_to_many :variants
end
class Variant < ActiveRecord::Base
has_and_belongs_to_many :option_values
def options_text
values = option_values.joins(:option_type)
values.collect! do |ov|
"#{ov.option_type.presentation}: #{ov.presentation}"
end
values.to_sentence({ words_connector: ", ", two_words_connector: ", " })
end
end
这里如果把 values.collect! 替换成 values.map! 就报错
undefined method `map!' for #<OptionValue::ActiveRecord_AssociationRelation:0x007fd5175ba650>
我也查看了 Rails4 的 API。并没有扩展 map! 或者 collect! 方法。
环境:Ruby 2.0.0, Rails 4.1.0.beta1
PS: 我的 Dash 安装的是 Ruby 2.1 的文档,所以看的是 Ruby2.1 的文档对 map! 和 collect! 的解释。