我有用户模型和个人资料模型。
用户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
对象。确实如此。
我错过了什么?如何将变量传递给与另一个控制器共享的部分?
答案 0 :(得分:3)
locals
方法中的 render
选项,使用散列locals: { foo: @bar }
中的值创建一个新变量,而不是共享@
实例变量。
答案 1 :(得分:3)
只需从@
移除@profile.title
,因为它不是实例变量,而是本地变量,因此您不需要@
注意:请检查该部分是否安全。