1

私は2つのモデルを持っています。ホテルモデル:

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

layouts/application.html.erb この行を head ブロックに追加するだけです

<%= csrf_meta_tags %>
于 2013-10-02T10:16:09.693 に答える
0

問題は、 current_user が nil で、ホテルを取得しようとすると失敗することです。

current_user.hotels

問題は、current_user を設定するのは何ですか? devise を使用しています。hotels-index で何をしているか確認できますか? そのために自動的にログインしますか、それともログインしている場合とそうでない場合があり、それを取得できないと想定していますか?

于 2013-10-01T00:30:19.367 に答える