Я совершенно не уверен, почему я получаю эту ошибку - я считаю, что я определили мои переменную правильно в моем контроллере отчета - это не имеет смысла для меня почему Я получаю ошибку. Любая помощь в понимает, что это будет очень признательно.неопределенного метод `model_name» для NilClass: Класс - rails4
я в настоящее время получаю сообщение об ошибке
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
catergory_report.rb
class CategoryReport < ActiveRecord::Base
has_many :reports
has_many :adverts
end
advert.rb
class Advert < ActiveRecord::Base
belongs_to :report
belongs_to :category_report
end
отчеты/_form.html.erb
<%= 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 %>
reports_controller.rb
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
seed.rb
CategoryReport.delete_all
crt1 = CategoryReport.create!(name:'spam')
crt2 = CategoryReport.create!(name:'disturbing content')
crt3 = CategoryReport.create!(name:'incorrect information')
никто не будет, вероятно, будет в состоянии сказать вам, если вы не предоставите объект Params от контроллера и маршрут, который вы пытаетесь ударить. Возможно ли, что маршрут шоу вложен? –
На основании вашего снимка экрана вы запрашиваете '/ userrs/18/adsverts/65' (есть ли конкретная причина для двойного 'r' в userrs?). Я предполагаю, что вы используете маршруты Rails по умолчанию, поэтому вы запрашиваете действие 'show' из' AdvertsController', а не 'ReportController'. Вы устанавливаете '@ report' в действии' show' из 'AdvertsController'? –