Как я могу сгенерировать ссылку на идентификатор профиля? - PullRequest
0 голосов
/ 28 января 2019

У меня есть два контроллера - ProfilesController и UsersController.У меня есть страница, полная постов в блоге, и я хочу, чтобы у каждого была ссылка на профиль пользователя, который их создал.У меня были крошечные проблемы с этим в последнее время, и я хочу начать все сначала, но не знаю, с чего начать.Как я могу это сделать?

Почтовый контроллер:

 def index
  if params[:search]
    @posts = Post.search(params[:search]).order("created_at DESC").paginate(page: params[:page], per_page: 5)
  else
    @posts = Post.all.order('created_at DESC').paginate(page: params[:page], per_page: 5)
  end
 end

Модель профилей:

class Profile < ApplicationRecord
  belongs_to :user
end

Модель пользователя:

class User < ApplicationRecord
  has_secure_password
  validates :username, uniqueness: true
  has_many :posts, foreign_key: :author
  has_many :comments, foreign_key: :author
  has_one :profile, foreign_key: :user

  after_create :build_profile

  def build_profile
    Profile.create(user: self) # Associations must be defined correctly for this syntax, avoids using ID's directly.
  end

end

BTW not using Devise

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Как ваши таблицы SQL?Было бы лучше, если бы в вашей таблице сообщений было поле user_id, чтобы вы могли искать пользователя по id (user_id) и обрабатывать ссылку с помощью:

<%= link_to 'Post Owner', user_path(post.user_id) %>

Проверьте, работает ли она для вас, и дайтея знаю.

0 голосов
/ 28 января 2019

Во-первых, мы получаем объект profile каждого сообщения, как это (вы должны попробовать это в консоли rails):

@posts.first.user.profile # get the profile of first post

После этого мы используем profile_path для генерации ссылки на profiles#show(Конечно, вам нужно определить контроллер Profile)

profile_path(@posts.first.user.profile)

Я часто делаю это в view, а не в controller.

Счастливого кодирования!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...