2016-09-25 5 views
0

У меня есть модель Users с has_many :comments Каждый комментарий записывает current_user в столбец commenter.Как получить информацию из детского стола

Как я могу назвать имя @ commenter.username в своем представлении и показать имя пользователя комментатора?

В настоящее время в комментариях_контроллер, используя: @commenter = User.find("2"), вытащит правильную информацию. Я хотел бы использовать что-то вдоль линий: @commenter = User.find_by_id(:commenter)

+0

Можете ли вы предоставить некоторый фактический код (например, код модели)? Трудно понять, как выглядят ваши отношения с моделью. –

+0

Также поможет ваша схема db. Я не понимаю, почему вы используете 'commenter' в качестве имени столбца, стандартный формат будет' user_id' для отношения 'own_to'. –

+0

@ChrisSalzberg Извините за путаницу, я использую user_id, чтобы соответствовать комментарию на странице пользователя, комментатор предназначен исключительно для пользователя, разместившего комментарий. Кроме того, не существует кода модели для комментариев, кроме того, что принадлежит role_to/has_many – aidiah

ответ

1

Из комментариев, это звучит, как у вас есть эта Comment модель:

class Comment < ActiveRecord::Base 
    belongs_to :user 
end 

Комментарий модель представляет комментарии на странице пользователя, где модель пользователя определяется как:

class User < ActiveRecord::Base 
    has_many :comments 
end 

Существует также commenter столбец на comments таблицы для хранения пользователя, разместившего комментарий (на дру er пользовательская страница).

Во-первых, я бы рекомендовал использовать commenter_id для этого столбца, а не commenter, так как это соглашение для хранения идентификаторов любого типа.

Предполагая, что у вас есть commenter_id колонка на comments таблиц, вы бы затем определить вторые отношения следующим образом:

class Comment < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :commenter, class_name: "User", foreign_key: :commenter_id 
end 

commenter отношение определяет пользователь, который написал комментарий, а не пользователь , чья страница размещена на.

Для другой стороны этого отношения, обновить User модели:

class User < ActiveRecord::Base 
    has_many :comments 
    has_many :page_comments, class_name: "Comment", foreign_key: :commenter_id 
end 

Здесь page_comments определяет комментарии этого пользователь разместил на страницах других пользователей.

Тогда, если у вас есть @comment, вы можете получить имя комментатора с просто:

@comment.commenter.name 

Пока вы настраиваете ваши имена столбцов и модели правильно, касающиеся получения информации, как это должно быть очень просто.

+0

Это сработало, но без символа @, просто 'comment.commenter.username' – aidiah

+0

Замечательно! –

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