1

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

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

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

4

2 回答 2

0

问题是 current_user 为 nil 并且当您尝试在其上获取酒店时失败。

current_user.hotels

所以问题是:什么设置了 current_user?您正在使用设计 - 您可以检查您在酒店索引上所做的事情吗?您是否会为此自动登录,还是假设您有时已登录,有时未登录,并且无法获取该信息?

于 2013-10-01T00:30:19.367 回答
0

只需在你的 layouts/application.html.erb 中添加这一行到 head 块中

<%= csrf_meta_tags %>
于 2013-10-02T10:16:09.693 回答