Rails / Devise — передача имени пользователя в сборку профиля

В настоящее время я работаю над проектом 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 бесполезен, поскольку он не уникален.


person abbott567    schedule 16.01.2015    source источник
comment
Рассматривали ли вы просто использование users#show в качестве страницы профиля?   -  person Eric    schedule 16.01.2015
comment
Такое простое решение! Я не знал, что у вас может быть стандартный пользовательский контроллер, я думал, что он заблокирован для разработки. Сделал контроллер пользователей и передал информацию о профилях, и это сработало! Большое спасибо!   -  person abbott567    schedule 17.01.2015


Ответы (1)


Рассматривали ли вы использование вложенных маршрутов? В вашем файле route.rb вы можете иметь:

resources :users do
  resources :profiles
end

Таким образом, вы затем используете что-то вроде <%= link_to user_profile_path(@profile.user, @profile), @profile %>

person DaKaZ    schedule 16.01.2015