Çok-çok ilişkisi oluşturma Raylar 3
Bunu başarmak için çalışıyorum ne basitleştirilmiş bir örnektir, Raylar oldukça yeniyim ben ve modeller arasındaki ilişkiler etrafında başımı almak için mücadele ediyorum.
İki model, User
model ve Category
modeli var. Bir kullanıcı birçok kategori ile ilişkili olabilir. Belirli bir kategori birçok kullanıcı için kategori listesinde görünebilir. Eğer belirli bir kategori silindiğinde, bu kategori için bir kullanıcı listesi yansıması gerekir.
Bu örnekte:
Categories
masam beş kategoride içerir:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ID | Name | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 1 | Sports | | 2 | News | | 3 | Entertainment | | 4 | Technology | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Users
masam iki kullanıcı içerir:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ID | Name | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 1 | UserA | | 2 | UserB | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Kullanıcının yaptığı kategoriler olarak Spor ve Teknoloji seçebilirsiniz
UserB Haber, Spor ve Eğlence seçebilirsiniz
Spor kategorisinde silinir, hem Kullanıcının ve UserB kategori listelerini silme işlemini yansıtmaktadır
Bir kategori hem de kullanıcı kimlikleri tutan UserCategories
tablo oluşturma ile oynadı fikrimi değiştirdim. Bu biraz işe yaradı, kategori adlarını bakabilirdim ama bir basamaklı silme çalışmak için alamadım ve tam çözümü yanlış görünüyordu.
Bulduğum has_many ve belongs_to işlevleri kullanma örnekleri eşleme tartışmak için bire bir ilişki gibi görünüyor. Örneğin, bir blog yazısı yorum.
- Ne kadar çok-çok bu ilişki, yerleşik Raylar işlevini kullanarak temsil ediyorsunuz?
- Raylar kullanıldığında ikisi arasında ayrı bir tablo kullanarak kalıcı bir çözüm?
CEVAP
has_and_belongs_to_many
bir ilişki istiyorsun. Kılavuzu bu grafikler ve her şeyi nasıl çalıştığını anlatan harika bir iş yok:
http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association
Gibi bir şey ile sona erecek:
# app/models/category.rb
class Category < ActiveRecord::Base
has_and_belongs_to_many :users
end
# app/models/user.rb
class User < ActiveRecord::Base
has_and_belongs_to_many :categories
end
# db/migrate/1213123123123_create_categories_users_join_table.rb
class CreateCategoriesUsersJoinTable < ActiveRecord::Migration
def self.up
create_table :categories_users, :id => false do |t|
t.integer :category_id
t.integer :user_id
end
add_index :categories_users, [:category_id, :user_id]
end
def self.down
drop_table :categories_users
end
end
Bu göç tablo; Raylar otomatik olarak habtm ilişki belirttiğinizde o yaratmaz katılmak unutmayın. Bildiğim kadarıyla bilgi erişim, Raylar için kullanılır tüm yardımcıları oluşturur:
User.categories #=> [<Category @name="Sports">, ...]
Category.users #=> [<User @name="UserA">, ...]
User.categories.empty?
API Raylar için Sürüm oluşturma Yollar...
Multi-tenant bir uygulama'in şema...
Raylar üzerinde Vasiyetle yönetici kul...
Doğrulamak birden çok sütun benzersiz ...
lambda ve Raylar 4 tarzı argümanlar ka...