Post sınıfında post_id adlı bir yabancı ile bir Yorum sınıfına sahibim.Rails modelleri için yabancı anahtar ilişkilerini tanımlama
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 bir veritabanı düzeyinde yabancı anahtarı tanımlamak değil benim CreateComments göç:
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ütundur.
Dolayısıyla, bu yabancı anahtar ilişkisinin sadece veritabanı seviyesinde değil, Rails'in aklında olduğu görülmektedir.
Bu doğru mu?
Ayrıca, ilgili Post modelinin yabancı yabancı anahtar ilişkisini de açıklamaları için: foreign_key özniteliğini kullanarak yorumlanması gerekir mi yoksa atlanamaz mı?
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
Rails'in SQL anahtarını kullanmadığı konusundaki sürprizinizi paylaşıyorum. DB'lerdeki ray dışı araçların kullanılmasını zorlaştırır. – Greg
Raylar, "TÜM iş mantığı uygulamada tanımlanmalıdır" kuralını izler ... böylece DB'yi yalnızca "dilsiz" bir depolama alanı olarak kullanır. Yabancı anahtar yok, saklı yordam yok, kısıtlama yok (örneğin, postgre'lerde desteklenir). DÜZENLEME: Sadece bu aynı cevabı buldu - http://stackoverflow.com/questions/8334602/need-to-create-a-foreign-key-when-creating-a-table-on-rails –
https://github.com/matthuhiggins/foreigner – wberry