如何将变量传递给与另一个控制器共享的部分?

时间:2015-10-15 09:32:54

标签: ruby-on-rails

我有用户模型和个人资料模型。 用户has_one个人资料和个人资料belongs_to用户。

app/views/users/show.html.erb内,我想显示用户的相关个人资料详情。

我在app/views/profiles/shared/_show.html.erb创建了一个部分内容。它包含:

<p>
  <strong>Title:</strong>
  <%= @profile.title %>
</p>

我正试图在app/views/users/show.html.erb范围内包含此部分内容(如API documentation中所建议的那样):

<%= render partial: 'profiles/shared/show', locals: { profile: @user.profile }%>

然而,我一直收到错误:

undefined method `title' for nil:NilClass

如果从部分中删除<%= @profile.title %>行,则会正确呈现(因此我假设路径正确)。

我还检查过@user.profile包含有效的Profile对象。确实如此。

我错过了什么?如何将变量传递给与另一个控制器共享的部分?

2 个答案:

答案 0 :(得分:3)

locals方法中的

render选项,使用散列locals: { foo: @bar }中的值创建一个新变量,而不是共享@实例变量。

答案 1 :(得分:3)

只需从@移除@profile.title,因为它不是实例变量,而是本地变量,因此您不需要@

注意:请检查该部分是否安全。