Rails / 设计 - 将用户名传递到配置文件构建中

Rails / Devise - Passing Username into Profile Build

我目前正在使用 devise 进行 rails 项目,但我 运行 遇到了一些问题。

我有默认的 devise:install 运行 我的 User 模型,我还有一个名为 Profile 的模型。它belongs_to :user,而用户has_one :profile

我遇到的问题是,我要求用户拥有用户名,因此必须在注册时完成;所以这是通过设计传递给用户 table 的。但是我需要使用用户配置文件 url 的用户名,这意味着使用配置文件视图从用户 table 交叉属性。

在我使用的用户模型中:after_create :build_profile 为该用户构建配置文件。这会在配置文件 table 中创建一个包含 first_namelast_name 等的配置文件。

因此,使用 'friendly_id' gem 我可以 link 从“profiles/index”页面到用户配置文件的属性。问题是我只能使用已经传递到配置文件 table 的东西,例如 first_namelast_name 我不能 link 到 :username 作为在用户 table 中,而不是在配置文件 table.

在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 %>

这适用于制作诸如 /profiles/John 之类的 URL,但约翰并不好,因为它不是唯一的。

您是否考虑过使用嵌套路由?在您的 routes.rb 文件中,您可以拥有:

resources :users do
  resources :profiles
end

这样,您就可以使用 <%= link_to user_profile_path(@profile.user, @profile), @profile %>