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_name
和 last_name
等的配置文件。
因此,使用 'friendly_id' gem 我可以 link 从“profiles/index”页面到用户配置文件的属性。问题是我只能使用已经传递到配置文件 table 的东西,例如 first_name
或 last_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 %>
我目前正在使用 devise 进行 rails 项目,但我 运行 遇到了一些问题。
我有默认的 devise:install 运行 我的 User 模型,我还有一个名为 Profile 的模型。它belongs_to :user
,而用户has_one :profile
。
我遇到的问题是,我要求用户拥有用户名,因此必须在注册时完成;所以这是通过设计传递给用户 table 的。但是我需要使用用户配置文件 url 的用户名,这意味着使用配置文件视图从用户 table 交叉属性。
在我使用的用户模型中:after_create :build_profile
为该用户构建配置文件。这会在配置文件 table 中创建一个包含 first_name
和 last_name
等的配置文件。
因此,使用 'friendly_id' gem 我可以 link 从“profiles/index”页面到用户配置文件的属性。问题是我只能使用已经传递到配置文件 table 的东西,例如 first_name
或 last_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 %>