为什么current_user不能按预期工作?

时间:2012-12-29 02:50:26

标签: ruby-on-rails devise

使用设计进行身份验证时,会从以下视图代码中引发undefined method 'size' for nil:NilClass

<% @relationships.each do |relationship| %>
  <div><%= relationship.box.size  %></div>
<% end %>

仅当我在控制器中将@relationships定义为

@relationships = current_user.relationships

但不是在我将其定义为

@relationships = User.find(current_user.id).relationships

这两个定义不应该相同吗?

我有以下关联:

class Relationship < ActiveRecord::Base

  belongs_to :user
  belongs_to :box

end

class User < ActiveRecord::Base

  has_many: :relationships
  has_many: :boxes, through: :relationships

end

class Box < ActiveRecord::Base

  has_many: :relationships
  has_many: :users, through: :relationships

end

我希望我提供了正确的信息;这是我第一次无法找到堆栈溢出的答案。提前谢谢!

1 个答案:

答案 0 :(得分:0)

我在同一个动作中通过current_user(current_user.relationships.new)创建了另一个对象:

@relationship = current_user.relationships.new
@relationships = current_user.reload.relationships #reload required

对第一个分配进行以下更改后,可以删除重新加载呼叫:

@relationship = Relationship.new
@relationships = current_user.relationships

特别感谢@AmitKumarGupta帮助新手!