SORU
24 Mayıs 2009, Pazar


' modelleri Raylar için tanımlama yabancı anahtar ilişkileri

Sonrası sınıfta bir :foreign_key post_id ile Yorum Dersim var.

class Comment < ActiveRecord::Base
  belongs_to :post, :class_name => "Post", :foreign_key => "post_id", :counter_cache => true
  belongs_to :author, :class_name => "User", :foreign_key => "author_id"
end

Ama benim CreateComments göç veritabanı düzey yabancı anahtar tanımlayın:

class CreateComments < ActiveRecord::Migration
  def self.up
    create_table :comments do |t|
      t.column "post_id",       :integer,   :default => 0, :null => false
      t.column "author",        :string,    :default => "",   :limit => 25, :null => false
      t.column "author_email",  :string,    :default => "",   :limit => 50, :null => false
      t.column "content",       :text,      :null => false
      t.column "status",        :string,    :default => "",   :limit => 25, :null => false
      t.timestamps
    end
  end

  def self.down
    drop_table :comments
  end
end

Yerine post_id basit Tamsayı sütun.

Bu yüzden, bu yabancı anahtar ilişkisi veritabanı düzeyinde Raylar zihninde sadece var gibi görünüyor.

Bu doğru mu?

Ayrıca, ilgili Yazı modeli de Yorumlar :foreign_key öznitelik ya da ihmal edilebilecek kullanarak karşılıklı yabancı anahtar ilişkilerini beyan etmek için gerekli mi?

class Post < ActiveRecord::Base
  set_table_name("blog_posts")
  belongs_to :author, :class_name => "User", :foreign_key => 'author_id'
  has_many :comments, :class_name => "Comment",
    :foreign_key => 'post_id', :order => "created_at desc", :dependent => :destroy
  has_many :categorizations
  has_many :categories, :through => :categorizations
  named_scope :recent, :order => "created_at desc", :limit => 5

end

CEVAP
24 Mayıs 2009, Pazar


Raylar varsayılan davranış sütun bir model üzerinde yabancı anahtar tutmak için kullanılan _id eklendi soneki ile dernek adına. :foreign_key seçeneği yabancı anahtar adı doğrudan ayarlamanızı sağlar. Post Comment model sınıfları arasındaki ilişkileri bu gibi görünmelidir:

class Post < ActiveRecord::Base
  has_many :comments
end

class Comment < ActiveRecord::Base
  belongs_to :post
end

&; Comment model :class_name => "Post" gerekmez Unutmayın -. Raylar zaten biliyorsunuz. Geçersiz kılmak için ihtiyacınız olduğunda sadece :class_name belirtmek gerekir :foreign_key Raylar' kuralları.

Raylar sizin için yabancı anahtar ilişkilerini koruyan haklısınız. Eğer isterseniz yabancı anahtar kısıtlamaları ekleyerek veritabanı katmanı onları zorlayabilir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Grace Su

    Grace Su

    6 Ocak 2006
  • Howcast

    Howcast

    4 EKİM 2007
  • Troy Hunt

    Troy Hunt

    29 EYLÜL 2011