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

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

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

 def index
    @shit = Static.all.order('id DESC')
  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

Кстати, не используя Devise

Ответы [ 2 ]

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

В одном объекте @post вы должны иметь отношение к владельцу (пользователю). По вашему мнению, для каждого сообщения используйте маршрут для user_path, но укажите @post.user

Пример в представлении

<% @posts.each do |post| %> <%= link_to user_path(post.user) %> //Rest of post content <% end %>

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

Использование joins

def index
  @shit = Static.all.order('id DESC')
  scope = 
    if params[:search]
      Post.search(params[:search])
    else
      Post.all
    end

  @posts =
    scope.
      joins(:users).
      joins(:profiles).
      order("created_at DESC").
      paginate(page: params[:page], per_page: 5)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...