Rails / Devise - 将用户名传递给Profile Build

时间:2015-01-16 17:49:28

标签: ruby-on-rails ruby-on-rails-4 devise friendly-id

我目前正在使用设计工作一个rails项目,我遇到了一些问题。

我有默认设计:使用我的用户模型运行安装,我有另一个名为Profile的模型。它是belongs_to :user,用户是has_one :profile

我遇到的问题是,我要求用户拥有用户名,因此必须在注册时完成;所以这通过设计传递到users表。但是我需要使用用户配置文件URL的用户名,这意味着使用“个人档案”视图与“用户”表格中的属性进行交叉。

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

因此,使用'friendly_id'gem我可以链接到'profiles / index'页面中的属性到用户配置文件。问题是我只能使用已传递到配置文件表中的内容,例如first_namelast_name我无法链接到:username,因为它位于Users表中,而不是个人资料表。

在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,但John并不好,因为它不是唯一的。

1 个答案:

答案 0 :(得分:1)

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

resources :users do
  resources :profiles
end

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

的内容