2016-08-21 12 views
1

ich den Benutzernamen Kommentar Autor ähnlichebelongs_to alias

comment.commenter 

models/comment.rb

class Comment < ActiveRecord::Base 
belongs_to :commenter 
belongs_to :commentable, polymorphic: true 
end 

Modelle erhalten möchten/user.rb

class User < ActiveRecord::Base 
# Include default devise modules. Others available are: 
# :confirmable, :lockable, :timeoutable and :omniauthable 
devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 

validates :username, presence: true, uniqueness: true 

has_many :comments, as: :commenter 
end 

Wenn ich versuche, Erstellen Sie mithilfe dieser Codezeile einen Kommentar direkt zu db:

Comment.create(commentable_type: 'Pokemon', commentable_id: 1, content: 'great', commenter: 1) 

Es wirft diesen Fehler

NameError: uninitialized constant Comment::Commenter 
from /var/lib/gems/2.3.0/gems/activerecord-4.2.6/lib/active_record/inheritance.rb:158:in `compute_type' 

ich gelesen habe irgendwo als: verwendet wird nur für polymorphe assocciations so dass der Fall meines Fehlers sein könnte, aber konnte nicht herausfinden, wie dieses Problem zu bekommen

Antwort

2

Ich glaube nicht, as: ist, was Sie suchen. Ich denke, das Problem auf das Problem ähnlich ist in belongs_to with :class_name option fails

# user.rb 
has_many :comments, foreign_key: "commenter_id" 

# comment.rb 
belongs_to :commenter, class_name: "User", foreign_key: "commenter_id" 
+0

Danke, das mein Problem gelöst –

0

Lassen Sie uns ein wenig erklären versuchen, bevor die Lösung gehen, wenn Sie diesen Code schreiben:

belongs_to :commentable, polymorphic: true 

Es implizit bedeutet:

belongs_to :commentable, foreign_key: 'commentable_id', foreign_type: 'commentable_type', polymorphic: true 

Und

has_many :comments, as: :commentable 

Es die Syntax von polymorphen gibt, bedeutet, dass auch die foreign_keycommentable_id und foreign_type ist commentable_type also, wenn Sie commentable zu commenter ändern möchten, ist es möglich, können Sie wie folgt tun:

class Comment < ActiveRecord::Base 
    belongs_to :commenter, foreign_key: 'commentable_id', foreign_type: 'commentable_type', polymorphic: true 
end 

class User < ActiveRecord::Base 
    has_many :comments, as: commentable 
end 

Das ist es!

Für Detail, gehen Sie bitte über has_many und belongs_to Dokumentation

+0

ich würde nicht kommentierbaren Commenter ändern wollen, da ich es für andere Zwecke benötigen –

Verwandte Themen