2016-08-21 2 views
1

Я хочу, чтобы получить имя пользователя автора комментария, как этогоBELONGS_TO псевдоним

comment.commenter 

моделей/comment.rb

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

модели/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 

Когда я пытаюсь для создания комментария непосредственно к db с использованием этой строки кода:

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

Он бросает эту ошибку

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' 

Я где-то читал, как: используется только для полиморфных assocciations, так что может быть в случае моей ошибки, но не мог понять, как обойти эту проблему

ответ

2

Я не думаю, что as: - это то, что вы ищете. Я думаю, что ваш вопрос похож на вопрос в 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

Спасибо, это решить мою проблему –

0

Поясним немного, прежде чем идти к решению, если вы пишете этот код:

belongs_to :commentable, polymorphic: true 

Это косвенно означает:

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

И

has_many :comments, as: :commentable 

Он определяет синтаксис полиморфные, что также означает, что foreign_key является commentable_id и foreign_type является commentable_type, так что если вы хотите изменить commentable к комментатора, возможно, вы можете сделать так:

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 

Это оно!

Для подробной информации, пожалуйста пройти через has_many и belongs_to документацию

+0

я не хотел бы изменить commentable на комментатор, так как мне это нужно для других целей –

Смежные вопросы