Class: ActiveRecord::Relation
- Inherits:
-
Object
- Object
- ActiveRecord::Relation
- Defined in:
- lib/pluck_all/models/active_record_extension.rb,
lib/pluck_all/models/active_record_extension.rb
Instance Method Summary collapse
-
#cast_carrier_wave_uploader_url(attributes) ⇒ Object
—————————————————————- ● Support casting CarrierWave url —————————————————————-.
- #cast_need_columns(column_names, _klass = nil) ⇒ Object
- #pluck_all(*column_names, cast_uploader_url: true) ⇒ Object
- #select_all(*column_names) ⇒ Object
Instance Method Details
#cast_carrier_wave_uploader_url(attributes) ⇒ Object
● Support casting CarrierWave url
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/pluck_all/models/active_record_extension.rb', line 81 def cast_carrier_wave_uploader_url(attributes) if defined?(CarrierWave) && klass.respond_to?(:uploaders) @pluck_all_cast_klass ||= klass @pluck_all_uploaders ||= @pluck_all_cast_klass.uploaders.select{|key, _uploader| attributes.key?(key.to_s) } @pluck_all_uploaders.each do |key, _uploader| {}.tap do |hash| @pluck_all_cast_need_columns.each{|k| hash[k] = attributes[k] } if @pluck_all_cast_need_columns obj = @pluck_all_cast_klass.new(hash) obj[key] = attributes[key_s = key.to_s] # https://github.com/carrierwaveuploader/carrierwave/blob/87c37b706c560de6d01816f9ebaa15ce1c51ed58/lib/carrierwave/mount.rb#L142 attributes[key_s] = obj.send(key) end end end return attributes end |
#cast_need_columns(column_names, _klass = nil) ⇒ Object
5 6 7 8 9 |
# File 'lib/pluck_all/models/active_record_extension.rb', line 5 def cast_need_columns(column_names, _klass = nil) @pluck_all_cast_need_columns = column_names.map(&:to_s) @pluck_all_cast_klass = _klass return self end |
#pluck_all(*column_names, cast_uploader_url: true) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/pluck_all/models/active_record_extension.rb', line 18 def pluck_all(*column_names, cast_uploader_url: true) column_names.map!(&to_sql_column_name) result = select_all(*column_names) result.map! do |attributes| # This map! behaves different to array#map! initialized_attributes = klass.initialize_attributes(attributes) attributes.each do |key, _attribute| attributes[key] = klass.type_cast_attribute(key, initialized_attributes) # TODO: 現在AS過後的type cast會有一點問題 end cast_carrier_wave_uploader_url(attributes) if cast_uploader_url next attributes end end |
#select_all(*column_names) ⇒ Object
11 12 13 14 15 |
# File 'lib/pluck_all/models/active_record_extension.rb', line 11 def select_all(*column_names) relation = clone relation.select_values = [].freeze # cannot use `unscope(:select)` in Rails 3 return klass.connection.select_all(relation.select(column_names).to_sql) end |