2015-12-26 18 views
5

Şu anda bu konuyla ilgileniyorum, lütfen bir bakın.Nesnelere göre nesneler nasıl sipariş edilir?

object.inspect bana

<RawMaterial id: nil, name: "Jam Button 9 mm Antique Silver", rate: 1.0, raw_material_wastage: 0.0, total_raw_material: 8.0, slug: nil, costing_id: nil, created_at: nil, updated_at: nil, inventory_item_id: 758, costing_wastage: 0.0, pick_from_order_sheet: false> 

zam object.to_yaml

-- !ruby/object:RawMaterial 
raw_attributes: 
    costing_id: 
    id: 
    name: Jam Button 9 mm Antique Silver 
    rate: '1' 
    raw_material_wastage: '0' 
    total_raw_material: '8' 
    slug: 
    created_at: 
    updated_at: 
    inventory_item_id: '758' 
    costing_wastage: '0' 
    pick_from_order_sheet: f 
attributes: !ruby/object:ActiveRecord::AttributeSet 
    attributes: !ruby/object:ActiveRecord::LazyAttributeHash 
    types: 
     id: &3 !ruby/object:ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer 
     precision: 
     scale: 
     limit: 
     range: !ruby/range 
      begin: -2147483648 
      end: 2147483648 
      excl: true 
     name: &2 !ruby/object:ActiveRecord::Type::String 
     precision: 
     scale: 
     limit: 255 
     rate: &1 !ruby/object:ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Float 
     precision: 
     scale: 
     limit: 
     raw_material_wastage: *1 
     total_raw_material: *1 
     slug: *2 
     costing_id: *3 
     created_at: !ruby/object:ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter 
     subtype: &4 !ruby/object:ActiveRecord::ConnectionAdapters::PostgreSQL::OID::DateTime 
      precision: 
      scale: 
      limit: 
     updated_at: !ruby/object:ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter 
     subtype: *4 
     inventory_item_id: *3 
     costing_wastage: *1 
     pick_from_order_sheet: &5 !ruby/object:ActiveRecord::Type::Boolean 
     precision: 
     scale: 
     limit: 
    values: 
     id: '70' 
     name: Jam Button 9 mm Antique Silver 
     rate: '1' 
     raw_material_wastage: '0' 
     total_raw_material: '8' 
     slug: 
     costing_id: '34' 
     created_at: '2015-06-10 09:12:13.721016' 
     updated_at: '2015-06-10 09:12:14.075739' 
     inventory_item_id: '758' 
     costing_wastage: '0' 
     pick_from_order_sheet: f 
    additional_types: {} 
    materialized: true 
    delegate_hash: 
     costing_id: !ruby/object:ActiveRecord::Attribute::FromUser 
     name: costing_id 
     value_before_type_cast: 
     type: *3 
     value: 
     id: !ruby/object:ActiveRecord::Attribute::FromDatabase 
     name: id 
     value_before_type_cast: 
     type: *3 
     value: 
     name: !ruby/object:ActiveRecord::Attribute::FromDatabase 
     name: name 
     value_before_type_cast: Jam Button 9 mm Antique Silver 
     type: *2 
     value: Jam Button 9 mm Antique Silver 
     rate: !ruby/object:ActiveRecord::Attribute::FromDatabase 
     name: rate 
     value_before_type_cast: '1' 
     type: *1 
     value: 1.0 
     raw_material_wastage: !ruby/object:ActiveRecord::Attribute::FromDatabase 
     name: raw_material_wastage 
     value_before_type_cast: '0' 
     type: *1 
     value: 0.0 
     total_raw_material: !ruby/object:ActiveRecord::Attribute::FromDatabase 
     name: total_raw_material 
     value_before_type_cast: '8' 
     type: *1 
     value: 8.0 
     slug: !ruby/object:ActiveRecord::Attribute::FromDatabase 
     name: slug 
     value_before_type_cast: 
     type: *2 
     value: 
     created_at: !ruby/object:ActiveRecord::Attribute::FromUser 
     name: created_at 
     value_before_type_cast: 
     type: !ruby/object:ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter 
      subtype: *4 
     value: 
     updated_at: !ruby/object:ActiveRecord::Attribute::FromUser 
     name: updated_at 
     value_before_type_cast: 
     type: !ruby/object:ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter 
      subtype: *4 
     value: 
     inventory_item_id: !ruby/object:ActiveRecord::Attribute::FromDatabase 
     name: inventory_item_id 
     value_before_type_cast: '758' 
     type: *3 
     value: 758 
     costing_wastage: !ruby/object:ActiveRecord::Attribute::FromDatabase 
     name: costing_wastage 
     value_before_type_cast: '0' 
     type: *1 
     value: 0.0 
     pick_from_order_sheet: !ruby/object:ActiveRecord::Attribute::FromDatabase 
     name: pick_from_order_sheet 
     value_before_type_cast: f 
     type: *5 
     value: false 
new_record: true 

bunu nasıl olabilir raise object.to_yaml yaparken alıyorum created_at değerine göre sipariş etmek istiyorum bu çıktı üretmesi verir bu çıktıyı verir bitti mi

+0

kullanım 'RawMaterial.order (: created_at): Bu kalıcı değildir ve bu demektir ki, gerçek yalnızca yaml çıktı (bu kez nesne veritabanına kalıcıdır kullanabilirsiniz rağmen' o new_record gösterir created_at neden şu anda nil değil) – Kkulikovskis

+0

Ben object.to_yaml yükseltirken aldığım değeri kullanmak istiyorum, null olmayan bir create_at değeri var, onu kullanabilir miyim? –

+0

, nesneyi veritabanına kaydetmek istememenizin bir nedeni var mı? Başka bir model, modelinizde özel bir 'initialize' yöntemini yapmak ve gerçek nesne başlatıldığında zamanla ilgileniyorsanız' Time.now' değeriyle bir özellik atamaktır. İstediğiniz özniteliği kullanmak son derece hakir görünmektedir – Kkulikovskis

cevap

2

Doğru anlıyorsam, RawMaterial türünde nesnelerin listesi vardır. Listeyi, her nesne için benzersiz olan ['attributes']['attributes']['values']['created_at'] nesne alanını ve Enumerable.sort_by yöntemini kullanarak sıralayabilirsiniz.

enumerable_of_raw_materials.sort_by { |raw_material| 
    raw_material['attributes']['attributes']['values']['created_at'] 
} 
+0

Merhaba, Benim sorunum .dup yöntemi created_at değerini çoğaltmıyor. Ben yaratılandan başka bir değer yaratıyorum. Bu, ruby ​​doktoruna göre doğru davranışdır. Formdaki tüm çoğaltılmış öğelere, onların create_at değeri –

+0

'a göre sıralanmasına ihtiyacım var. Eğer bir yerdeyseniz, 'dup' yöntemini çağırdığınız bir mantık varsa, aynı zamanda duplicated nesne ayarında 'created_at 'özniteliğini de güncelleyebileceğinizi düşünüyorum şimdiki zamana. Bir formun içinde bir sıralama tutmak için ihtiyacınız varsa, form içinde siparişin işini ve tarihe göre sıralama işini "konum" gibi yepyeni bir özellik kullanmanızı öneririm. –

İlgili konular