2016-04-03 14 views
0

nitelikleri:İki model sınıf denilen order.rb ve customer.rb sahip

order.rb

class Order < ActiveRecord::Base 
    belongs_to :customer 

validates :customer_id, :name, :age, :presence => true 

def self.to_csv 
     attributes = %w{ to_param name age } 
     CSV.generate(headers: true) do |csv| 
      csv << attributes 

       all.each do |t| 
       csv << attributes.map{ |attr| t.send(attr) } 
      end 
     end 
     end 

customer.rb

class Customer < ActiveRecord::Base 
belongs_to :order, primary_key: "customer_id" 
has_many :orders 

validates :phone_number, :name,:email,:presence => true, allow_blank: true 

Sorumu, e-posta ve ad özellikleri gibi customer.rb verilerini nasıl alabilirim. Ardından, order.rb verilerine ekleyin. order.rb modeline bakarsanız, listelenen özniteliklerini edinebilirim: ad ve yaş, ancak e-posta, ad ve phone_number gibi customer.rb özniteliklerini almaya çalışıyorum. Ancak, bir e-postaya yalnızca aşağıdaki yöntem görüntüsünü uygularsam ve aynı e-postayı tekrar tekrar yazdırırsam erişebilirim. Birisi bana yardım ederse şimdiden teşekkürler.

def to_param 
    Customer.new.email 
    Customer.all.first.email 
end 
+0

Neden her iki modelde de 'belongs_to' dernek var? Göründüğü gibi müşteri 'has_many' siparişleri olmalıdır. Öyle değil mi? – dp7

+0

@dkp Modelime eklemeyi unuttum ama geri döndüm ve değiştirdim. – user2803053

+0

Bunu 'Sipariş' modeline eklediniz, bunun yerine bunu 'Müşteri' modeline eklemelisiniz 'has_many: orders' – dp7

cevap

0

Bu e-posta kimlikleri peş peşe dönecektir -

Customer.all.each do |customer| 
     customer.email 
    end 
+0

Yukarıdaki kodu çalıştırdığımda, isim, e-posta ve telefon numarası gibi tüm özellikleri döndürür. Ayrıca e-posta kimliklerini birbiri ardına döndürmez. Tablonun her yuvasındaki tüm e-postaları döndürür. – user2803053

+0

Çalıştığım için teşekkürler, – user2803053

0
class Order < ActiveRecord::Base 
    belongs_to :customer 

    def self.to_csv 
    attributes = %w{ phone_number name age } 
    CSV.generate(headers: true) do |csv| 
     csv << attributes 
     all.each do |t| 
     # Note: Considering the attributes are defined in `Customer` model. 
     # It will get the `customer` of every order and send the message like 
     #  `email`, `name` and maps the responses to the messages 
     csv << attributes.map { |attr| t.customer.send(attr) } 
     end 
    end 
    end 
end 

class Customer < ActiveRecord::Base 
    has_many :orders 

    validates :phone_number, :name, :email, :presence => true, allow_blank: true 
    ... 
end 

tüm özellikleri o zaman Customer eksik olacak olanları yetki verebilir Order modelinde mevcut olmayabilir ise modeli.

# in order.rb  
deligate :name, :email, :phone_number, to: :customer, allow_nil: true 

# Then this will work; no need of `.customer` as message will be delegated 
csv << attributes.map { |attr| t.send(attr) } 

:allow_nil - true olarak ayarlanırsa, yetiştirilmek üzere bir NoMethodError engeller. See this for more info about delegation.

Daha fazla yardıma ihtiyacınız varsa buradan ekleyin.

+0

numaralı yardım için teşekkürler, ancak aynı problemle karşılaşıyorum. Tüm öznitelikleri döndürür ve her birini denediniz mi? – user2803053

+0

hangisini denediniz? eski mi, sonra mı? Çalışmalıydı. Lütfen dikkatlice bakın ve hiçbir şey kaçırmadığınızdan emin olun. Ben – illusionist

+0

yardım etmek için buradayım İş için teşekkürler var yardım için teşekkürler. delegasyondaki bağlantı bana – user2803053

İlgili konular