В настоящее время я работаю над проектом rails с использованием devise, и у меня возникла небольшая проблема.
У меня есть devise:install по умолчанию, работающий с моей моделью User, и у меня есть другая модель с именем Profile. Это belongs_to :user
, а пользователь has_one :profile
.
У меня проблема в том, что я требую, чтобы у пользователя было имя пользователя, поэтому это нужно сделать при регистрации; поэтому это передается в таблицу пользователей через devise. Но мне нужно использовать имя пользователя для URL-адреса профиля пользователя, а это означает пересечение атрибута из таблицы «Пользователи» с представлением «Профили».
В пользовательской модели я использую: after_create :build_profile
для создания профиля для этого пользователя. Это создает профиль с first_name
и last_name
и т. д. в таблице профилей.
Итак, используя гем «friendly_id», я могу связать атрибуты со страницы «profiles/index» с профилем пользователя. Проблема в том, что я могу использовать только то, что было передано в таблицу профилей, например first_name
или last_name
. Я не могу ссылаться на :username
, так как он находится в таблице «Пользователи», а не в таблице «Профили».
В файле profile_model.rb на данный момент я использую:
extend FriendlyId
friendly_id :first_name
и в файле profiles/index.html.erb я использую:
<% @profiles.each do |profile| %>
<p><%= link_to profile.user.username, profile %></p>
<% end %>
Это работает для создания URL-адресов, таких как /profiles/John, но John бесполезен, поскольку он не уникален.