Ruby on rails 未定义的方法`model#u name';对于NilClass:Class-rails4

Ruby on rails 未定义的方法`model#u name';对于NilClass:Class-rails4,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我完全不确定我为什么会犯这个错误——我相信我已经犯了 在我的报表控制器中正确定义了我的变量-它没有 让我明白为什么我会收到错误。有什么帮助吗 理解这一点将不胜感激 我当前收到了错误消息 undefined method `model_name' for NilClass:Class 控制台 Rendered reports/_form.html.erb (4.6ms) Rendered shared/_content_advert_show.html.erb (7.8ms) Re

我完全不确定我为什么会犯这个错误——我相信我已经犯了 在我的报表控制器中正确定义了我的变量-它没有 让我明白为什么我会收到错误。有什么帮助吗 理解这一点将不胜感激

我当前收到了错误消息

undefined method `model_name' for NilClass:Class

控制台

  Rendered reports/_form.html.erb (4.6ms)
  Rendered shared/_content_advert_show.html.erb (7.8ms)
  Rendered adverts/show.html.erb within layouts/application (10.3ms)
Completed 500 Internal Server Error in 16ms (ActiveRecord: 0.5ms)

NoMethodError - undefined method `model_name' for NilClass:Class:
  actionpack (4.1.10) lib/action_controller/model_naming.rb:9:in `model_name_from_record_or_class'
  actionview (4.1.10) lib/action_view/record_identifier.rb:47:in `dom_class'
  simple_form (3.0.2) lib/simple_form/action_view_extensions/form_helper.rb:58:in `simple_form_css_class'
  simple_form (3.0.2) lib/simple_form/action_view_extensions/form_helper.rb:19:in `simple_form_for'
  app/views/reports/_form.html.erb:1:in `_app_views_reports__form_html_erb__795468471443709165_70250827830400'
  actionview (4.1.10) lib/action_view/template.rb:145:in `block in render'
  activesupport (4.1.10) lib/active_support/notifications.rb:161:in `instrument'
模式

  create_table "reports", force: true do |t|
    t.text     "content"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "category_report_id"
  end

  create_table "category_reports", force: true do |t|
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
  end
report.rb

class Report < ActiveRecord::Base
  belongs_to :category_report
  has_many :adverts
end

您的
在\u操作:设置\u报告之前,只有:[显示,:编辑,:更新,:销毁]
报告控制器中。导致错误的控制器是
广告控制器
。您还需要在该控制器中设置报告

如果您在很多地方都有这个,您可以考虑将方法移到AppultPrimult

而不是<代码> @ Reals和ApEnter过滤器,您也可以考虑如下:

helper_method: :report

def report
  @_report ||= params[:id] ? Report.find(params[:id]) : Report.new
end

您的
在\u操作:设置\u报告之前,只有:[显示,:编辑,:更新,:销毁]
报告控制器中。导致错误的控制器是
广告控制器
。您还需要在该控制器中设置报告

如果您在很多地方都有这个,您可以考虑将方法移到AppultPrimult

而不是<代码> @ Reals和ApEnter过滤器,您也可以考虑如下:

helper_method: :report

def report
  @_report ||= params[:id] ? Report.find(params[:id]) : Report.new
end

除非您从控制器提供params对象以及您试图点击的路线,否则可能没有人能够告诉您。放映路线是否可能嵌套?根据您的屏幕截图,您正在请求
/userrs/18/adverts/65
(userrs中的双'r'是否有具体原因?)。我假定您使用的是默认的Rails路由,因此您请求的是来自
AdvertsController
show
操作,而不是
ReportsController
。您是否在
广告控制器
显示
操作中设置了
@report
?除非您从控制器提供参数对象以及您尝试点击的路线,否则可能没有人能告诉您。放映路线是否可能嵌套?根据您的屏幕截图,您正在请求
/userrs/18/adverts/65
(userrs中的双'r'是否有具体原因?)。我假定您使用的是默认的Rails路由,因此您请求的是来自
AdvertsController
show
操作,而不是
ReportsController
。您是否在
广告控制器
显示
操作中设置了
@report
<%= simple_form_for(@report) do |f| %>
  <%= f.error_notification %>

  <div class="form-inputs">
    <%= f.association :category_report, collection: CategoryReport.all, prompt: "please choose", required: true, label: 'report this advert' %>
    <%= f.input :content %>
  </div>

  <div class="form-actions">
    <%= f.button :submit, "send report" %>
  </div>
<% end %>
class ReportsController < ApplicationController
  respond_to :html, :xml, :json
  before_action :set_report, only: [:show, :edit, :update, :destroy]

  def index
    @reports = Report.all
    respond_with(@reports)
  end

  def show
    respond_with(@report)
  end

  def new
    @report = Report.new
    respond_with(@report)
  end

  def edit
  end

  def create
    @report = Report.new(report_params)
    @report.save
    respond_with(@report)
  end

  def update
    @report.update(report_params)
    respond_with(@report)
  end

  def destroy
    @report.destroy
    respond_with(@report)
  end

  private
    def set_report
      @report = Report.find(params[:id])
    end

    def report_params
      params.require(:report).permit(:content, :category_report_id)
    end
end
CategoryReport.delete_all
crt1 = CategoryReport.create!(name:'spam')
crt2 = CategoryReport.create!(name:'disturbing content')
crt3 = CategoryReport.create!(name:'incorrect information')
helper_method: :report

def report
  @_report ||= params[:id] ? Report.find(params[:id]) : Report.new
end