未定义的局部变量或类的方法

时间:2016-05-18 14:37:35

标签: ruby ruby-on-rails-4

我错过了什么?

ERROR: undefined local variable or method `feedback' for #<#<Class:0x007f66dc8dca30>:0x007f66dc8cee80>

迁移:

class CreateFeedbacks < ActiveRecord::Migration
  def change
    create_table :feedbacks do |t|
      t.references :user
      t.text :body

      t.timestamps
    end
  end
end

型号:

class Feedback < ActiveRecord::Base
  attr_accessible :body, :user
  belongs_to :user
end

控制器:

class FeedbacksController < ApplicationController
  before_action :authenticate_user!

  def index
    @feedback = Feedback.all
  end

  def new
    @feedback = Feedback.new
  end

  def create
    @user = User.find(params[:user])
    @feedback = @user.feedbacks.create(params[:feedback])

    respond_to do |format|
      if @feedback.save
        format.html { redirect_to @user, notice 'Comment was successfully created.' }
        format.json { render json: @feedback, status: :created, location: @feedback }
      else
        format.html { render action: "new" }
        format.json { render json: @feedback.errors, status: :unprocessable_entily }
      end
    end
  end

用户模型:

has_many :feedback

路线:

resources :feedbacks
  resources :users do
    resources :feedbacks
  end

1 个答案:

答案 0 :(得分:1)

首先,正确设置问题和代码的样式以及标记文件(routes.rbcontrollersmodels正确)有很大帮助。否则,读者很难理解您的问题并发现代码问题。您可以参考https://meta.stackoverflow.com/editing-help了解styleguide / markdown。

其次,看起来您的routes.rb不正确 - 但同样,这可能是由于您的格式化造成的。根据您的问题,您的路线看起来像是:

resources :feedbacks 
    resources :users do 
        resources :feedbacks 
    end
end

应该是:

resources: users do
    resources: feedbacks
end

第三,您的模型中似乎有拼写错误(feedback而不是feedbacks。这就是:

class User < ActiveRecord::Base
    has_many :feedbacks
end

class Feedback < ActiveRecord::Base
    belongs_to :user
end

最后,请添加细节以及导致错误的确切运行内容。例如。你在控制台运行了什么东西,你加载了哪个页面?