SORU
25 ŞUBAT 2011, Cuma


Ç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
25 ŞUBAT 2011, Cuma


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?

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Alan Fullmer

    Alan Fullmer

    3 EYLÜL 2010
  • hanksranger

    hanksranger

    6 EKİM 2009
  • Justin Schenck

    Justin Schen

    24 Kasım 2006