2015-10-15 30 views
1

我有一个用户模型和一个配置文件模型。 A用户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对象。它的确如此。

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

+3

尝试只'profile.title' –

+0

胡的男人,你摇滚!就是这样。如果您将其添加为答案,我会接受它。 –

回答

3

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

3

刚刚从@profile.title删除@,因为它不是一个实例变量,但一个局部变量,所以你不需要@

注:确实有安全这部分的检查。

+0

“注意:请检查该部分是否安全。” - 你能详细谈谈?我应该检查什么? –

+0

你说过它在控制器之间共享。所以你必须确保一个配置文件每次都被传递给部分。否则代码将会中断。 – Minato

+1

好的。有你:) –

相关问题