2016-04-13 64 views
2

Yeni dizeleri (ID) dize dizisine itebiliyorum, ancak benim modelimin içinde bir dize dizisi oluşturmaya çalışıyorum - ancak doğru değerleri itmiyor.Ruby on Rails bir dizide iterek

class CreateCompanies < ActiveRecord::Migration 
    def change 
    create_table :companies do |t| 

    t.string :name 
    t.string :email 
    t.string :users, array: true, default: [] 
    t.timestamps null: false 
    end 
end 
end 

Ve burada Denetleyici'yi diziye yeni değerler ekleyerek ediyorum nasıl: Bir değer gerçekten eklenen olsun demek

c = Company.new 
c.users << @user.id 
c.save 

İşte

modeli böyle görünüyor

users: "--- []\n\u{478A6}" 

için bu sıkışmış Been: dizi, ama böyle kimlik ama sadece bazı rastgele değer değil Şimdi birkaç gün - eksik olanı bilen var mı?

GÜNCELLEME: Eklendi seni çok ilişkisi pek inşa etmek isteyen buraya acaba

def create 
@user = User.new(user_params) 
if @user.save 

    @user.id = SecureRandom.random_number(999999) 
    session[:user_id] = @user.id 

    c = Company.new 
    c.id = SecureRandom.random_number(999999) 
    c.name = @user.company_name 
    c.email = "email goes here" 
    c.users << @user.id 
    c.save 

    @user.company_id = c.id 
    @user.save 

    redirect_to '/dashboard' 
else 
    redirect_to '/' 
end 
end 

cevap

4

ait Array.push() denemelisiniz, ne yapmak gereken bir eklemektir company_id alanını users tablosunanumaranıza app/models/user.rb ekleyin ve app/models/company.rb numaranıza has_many :users ekleyin.

Ardından, kullanıcılara istediğiniz gibi erişebileceksiniz.

Eğer sadece bu gibi gidebilir kullanıcısıyla bir şirket oluşturmak istiyorsanız

GÜNCELLEME. Çoğaltmadan kaçınmak için veya daha da iyisi,

@user.company = Company.find_or_create_by name: 'Some name' 
+0

Görüyorum! Kullanıcılar tablosuna sadece bir company_id sütunu eklemek yeterli mi?Daha sonra bir Şirkete ait olan tüm kullanıcıları nasıl alabilirim? –

+0

Açıkladığım 3 adımı doldurmanız gerekiyor. Daha sonra 'company.users' olarak adlandırılabilir ve ActiveRecord bir sorgu yapar ve çoğunlukla bir dizi kullanıcı gibi davranan bir ActiveRecord :: Relation nesnesini döndürür. – Almaron

+0

Aha! Şu anda yeni bir Kullanıcı oluşturulduğunda Kullanıcı sınıfında yeni bir Şirket oluşturuyorum. (yukarıdaki kodla birlikte) Sonra onları nasıl bağlarım? –

0

, bunu yapmanın en iyi yolu, birçok bir çoğu kullanılarak yeni bir şirket oluşturmak kod tablo, tüm kimlikleri veritabanlarında dizi dizisi olarak depolamak yerine;

Böyle saklamak istiyorsanız, en iyi yol doğrudan dizi koymak yerine bir dize şeklinde olmalıdır. Bunun için array.join() gibi şeyler sizin için çok yararlı olacaktır. Hala yolunuzu ısrar Eğer bir bire çok ilişki kurmak için çalışıyorsanız

, belki yerine < <

+0

Geçerli ilişki bire çok; Bir Kullanıcı yalnızca bir şirkete sahip olabilir, ancak bir şirketin birçok kullanıcısı olabilir. .push() kullanmayı denediğimde Hayır Yöntemi hatası alıyorum. Hmm, yani yapabilirim. string nesnesini modelden alıp en son ID ile birleştirin ve güncelleyin? –

+0

Çok kişi varsa, Şirket tablosuna sütunlar koymaya gerek yoktur. Bunu yapmanın normal yolu, Kullanıcı tablosunda company_id adında bir sütun koyulur. – RoyX

+0

Aha! Bunun için oldukça yeniim. Kullanıcı sınıfında; belongs_to: şirket - ve Şirket sınıfında; has_many: kullanicilar. Kullanıcı modelinde t.string: company_name adında bir sütun zaten var, bunları nasıl bir araya getirebilirim? –