1

错误:

nil:NilClass 的未定义方法“客户”

app/controllers/customers_controller.rb:5:in `index'

关于文档,以下方法将在设置关系时可用。但是控制器只是抛出错误。有什么想法或建议吗?

def index
    @customers = @current_user.customers

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @customers }
    end
  end

这是我的简单客户模型:

class Customer < ActiveRecord::Base
  attr_accessible :customerID, :first_name, :phone, :surname
  belongs_to :user
end

而我的用户模型,主要是从设计中生成的。

class User < ActiveRecord::Base
  rolify
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :role_ids, :as => :admin
  attr_accessible :name, :email, :password, :password_confirmation, :remember_me


  validates_presence_of :name
  validates_uniqueness_of :email, :case_sensitive => false

  has_many :customers

end

那就是 index.erb

<% @customers.each do |customer| %>
  <tr>
    <td><%= customer.customerID %></td>
    <td><%= customer.surname %></td>
    <td><%= customer.first_name %></td>
    <td><%= customer.phone %></td>
    <td><%= link_to 'Show', customer %></td>
    <td><%= link_to 'Edit', edit_customer_path(customer) %></td>
    <td><%= link_to 'Destroy', customer, method: :delete, data: { confirm: 'Are you sure?' } %></td>
  </tr>
<% end %>
4

2 回答 2

1

您的对象 @current_user 看起来没有被正确实例化。由于您试图从 User 模型的实例中调用方法,因此您需要首先在内存中正确实例化对象。

如果我没记错的话,设计当前用户会话的辅助方法是没有“@”的“current_user”。

于 2013-05-06T18:00:13.960 回答
0

您需要将 @current_user 设置为正确的值,然后才能在控制器操作中使用它。在设计中,您通常会为所有仅限登录用户的控制器添加一个前置过滤器。那是:

before_filter :autenticate_user!

这会将@current_user 设置为登录用户。

于 2013-05-06T17:52:13.407 回答