Ruby on Rails:如何将用户的应用程序连接到他们的个人资料?

时间:2018-08-12 22:35:36

标签: ruby-on-rails ruby ruby-on-rails-5

我正在创建一个平台,用户必须在该平台上提交申请并单独填写个人资料表格。

在平台上,有一个页面包含指向每个人的个人资料的链接,而另一页面包含指向每个人的应用程序的链接。

我想添加一个链接到每个人的个人资料,以将他们带到他们的应用程序,还想要添加一个链接到每个人的应用程序,以将他们链接到他们的个人资料。

我为用户应用程序和配置文件提供了两组模型/控制器/视图。是否可以通过搜索具有相应名称的应用程序/配置文件来创建这些链接?

例如,在某个用户的应用程序上,有一个链接实际上是“链接到与该当前用户的应用程序具有相同的姓和名属性的配置文件”吗?

我最好的猜测是:

@user_application = UserApplication.find{ |x| x.last_name == 
@user_profile.last_name && x.first_name == @user_profile.first_name}

这在某种程度上是可行的,但是如果用户创建了一个应用程序却忘记了创建配置文件或尚未创建一个配置文件,则会导致错误页面。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您应该在模型之间建立关联。可以在here上找到有关关联的文档。

在您的设置中,您可能需要以下条件:

# user.rb
has_one :profile
has_one :user_application

# user_application.rb
belongs_to :user

# profile.rb
belongs_to :user

然后,您需要使用终端将user_id列添加到user_applicationprofile模型中:

rails g migration add_user_id_to_user_applications user_id:integer:index
rails g migration add_user_id_to_profiles user_id:integer:index
rails db:migrate

然后,当用户创建其个人资料/应用程序时,可以在控制器中将操作调整为以下内容:

def new
  @profile = current_user.build_profile
end

def create
  @profile = Profile.new(profile_params)
  # etc ...
end

最后,您将可以在视图中使用以下内容直接链接到用户的个人资料/应用程序:

<% if current_user.profile %>
  <%= link_to 'Profile', profile_path(current_user.profile) %>
<% end %>

(对于user_profiles来说显然很相似。)

如果您没有current_user方法(这是非常标准的做法),则可以通过配置文件或应用程序进行访问,例如profile.user.user_application

我会添加一个条件作为safe,因为如果(在这种情况下)NilClass丢失,您将得到一个user_application错误,并使用{{1} }。

这个问题范围很广,因此是一个概述-希望对您有所帮助。我的建议是尝试实施它,并在遇到任何问题时提出一个新问题。希望一切顺利!