Rails关联在不使用实例变量时有效

时间:2014-06-22 21:31:28

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord

到目前为止,我收到了我在Rails中看到的最奇怪的错误。在我看来,如果我直接找到记录,我可以打印出与绘画相关的电子邮件(例如Painting.find(15)。但是如果我尝试使用实例变量它会出错(例如@painting)。

视图/绘画/ show.html.erb

<%= Painting.find(15).artist.user.email %>  # works
<%= @painting.artist.user.email %> # Error: "undefined method 'user' for nil:NilClass"

控制器/ paintings_controller.rb

def show
  @painting = Painting.find(15)
end

模特:“用户”,“艺术家”,“绘画”。

  1. 用户可以是艺术家。那么user has_one artist

  2. artist has_many paintings

2 个答案:

答案 0 :(得分:1)

我认为你应该添加关联。这应该是这样的:

class User < ActiveRecord::Base
  has_one :artist # it's ok
end

class Artist < ActiveRecord::Base
  belongs_to :user # add this
  has_many :paintings
end

class Painting < ActiveRecord::Base
  belongs_to :artist
end

对我来说,这两种情况都适用于这种关联。

答案 1 :(得分:0)

使用

def show
  @painting = Painting.find(15).last
end

目前第二个是返回1个元素数组,但是为了调用依赖方法,你必须指定1个项目。