销毁操作后获取错误控制器#index中没有方法错误,并注销

时间:2013-10-01 00:27:05

标签: ruby-on-rails devise nomethoderror

我有两个型号。 酒店型号:

class Hotel < ActiveRecord::Base
  attr_accessible ...
  belongs_to :user
end

用户模型:

class User < ActiveRecord::Base
  devise ...
  has_many :hotels
end

hotels_controller.rb

class HotelsController < ApplicationController
  def index   
    @hotels = current_user.hotels
  end

  def show
    @hotel = Hotel.find(params[:id])
  end

  def new
    @hotel = Hotel.new
  end

  def create
    @hotel = Hotel.new(params[:hotel])
    @hotel.user = current_user
    if @hotel.save
      redirect_to hotels_path, notice: "Nice, you added new hotel " + @hotel.title
    else
      render "new"
    end  
  end

  def edit
    @hotel = Hotel.find(params[:id])
  end

  def update
    @hotel = Hotel.find(params[:id])
    if @hotel.update_attributes(params[:hotel])
      redirect_to hotels_path, notice: "Hotel " + @hotel.title + " was successfully updated"
    else
      render "edit"
    end  
  end

  def destroy
    @hotel = Hotel.find(params[:id])
    @hotel.destroy
    redirect_to hotels_path, notice: "Hotel " + @hotel.title + " was deleted"
  end
end

当我登录时,我正在创建一些带有某些字段的酒店,在提交之后,它会将我更改为酒店列表,这很不错。但是当我试图删除一些我得到的酒店时

NoMethodError in HotelsController#index

undefined method `hotels' for nil:NilClass

之后,当转到主页(root)时,我的会话结束,用户被注销。但!酒店被成功摧毁。索引动作的东西......我做错了什么?有什么想法吗?

2 个答案:

答案 0 :(得分:0)

问题是当你试图在其上找到酒店时,current_user为零并且失败。

current_user.hotels

所以问题是:什么设置current_user? 你正在使用设计 - 你能检查你在酒店指数上做了什么吗?你是自动登录的吗?还是假设你有时登录而有时不登录而且它没有选择那个?

答案 1 :(得分:0)

只需在head block中添加layouts / application.html.erb这一行

<%= csrf_meta_tags %>