J'ai un Commentaire catégorie :foreign_key de post_id dans le Post de la classe.
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
Mais mon CreateComments la migration ne permet pas de définir une base de données au niveau de la clé étrangère:
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
Au lieu de cela post_id est une simple colonne de type Integer.
Donc, il semble que cette relation de clé étrangère n'existe que dans l'esprit de Rails, pas au niveau base de données.
Est-ce correct?
Aussi, est-il nécessaire pour le Poste correspondant de modèle pour aussi déclarer sa réciproque relation de clé étrangère avec des Commentaires à l'aide de l' :foreign_key attribut ou peut-être omis?
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