Я работаю над Rails 4 App, один из моих модулей - это общий отчет о патрулировании, в котором пользователь создает отчет, основанный на его/ее старте/остановке сдвига. после создания отчета у них есть возможность вернуться в представление отчета и добавить отчет о патрулировании.NoMethodError Rails 4 App -> Проблема с вложенным атрибутом
Каждая вещь работает с представлением формы gen_rep_ent.
Специфическая ошибка, я получаю:
undefined method `general_report=' for #<GenRepEnt:0x007f871d9ea150>
следуют:
def create
@general_report = GeneralReport.find(params[:general_report_id])
@gen_rep_ent = GenRepEnt.new(gen_rep_ent_params)
@gen_rep_ent.general_report = @gen_rep_ent <-- Problem Line
respond_to do |format|
if @gen_rep_ent.save
format.html { redirect_to @general_report, notice: 'General Report Entry was successfully created.' }
format.json { render :show, status: :created, location: @general_report}
else
format.html { render :new }
format.json { render json: @general_report.errors, status: :unprocessable_entity }
end
end
end
Это третья линия, которая вызывает здесь проблему.
Моя модель general_report имеет следующее соотношение:
has_many :gen_rep_ents, dependent: :destroy
Мои Маршруты файл выглядит следующим образом:
Rails.application.routes.draw do
resources :mobile_alarm_reports
resources :mobile_incident_reports
resources :static_incident_reports
resources :general_reports do
resources :gen_rep_ents, except: [:index], controller: 'general_reports/gen_rep_ents'
end
resources :visitor_parkings
resources :residents
resources :sites
devise_for :users, controllers: { registrations: "registrations" }
# Adds Static Pages
root 'home#index'
get 'home/about'
get 'home/contact'
get 'home/pricing'
Моего шоу файл выглядит следующим образом:
<% @gen_rep_ents.each do |gen_rep_ent| %>
<table>
<thead>
<tr>
<th>Time</th>
<th>Report</th>
</tr>
</thead>
<tbody>
<tr>
<td><%= gen_rep_ent.time %></td>
<td><%= gen_rep_ent.report %></td>
</tr>
</tbody>
<% end %>
</table>
gen_rep_ents_controller.rb: < - Вложенный элемент
class GeneralReports::GenRepEntsController < ApplicationController
before_action :set_gen_rep_ent, only: [:show, :edit, :update, :destroy]
# GET /gen_rep_ents
# GET /gen_rep_ents.json
def index
@gen_rep_ents = GenRepEnt.all
end
# GET /gen_rep_ents/1
# GET /gen_rep_ents/1.json
def show
end
# GET /gen_rep_ents/new
def new
@general_report = GeneralReport.find(params[:general_report_id])
@gen_rep_ent = GenRepEnt.new
end
# GET /gen_rep_ents/1/edit
def edit
end
# POST /gen_rep_ents
# POST /gen_rep_ents.json
def create
@general_report = GeneralReport.find(params[:general_report_id])
@gen_rep_ent = GenRepEnt.new(gen_rep_ent_params)
@gen_rep_ent.general_report = @gen_rep_ent
respond_to do |format|
if @gen_rep_ent.save
format.html { redirect_to @general_report, notice: 'General Report Entry was successfully created.' }
format.json { render :show, status: :created, location: @general_report}
else
format.html { render :new }
format.json { render json: @general_report.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /gen_rep_ents/1
# PATCH/PUT /gen_rep_ents/1.json
def update
respond_to do |format|
if @gen_rep_ent.update(gen_rep_ent_params)
format.html { redirect_to @gen_rep_ent, notice: 'General Report Entry was successfully updated.' }
format.json { render :show, status: :ok, location: @gen_rep_ent }
else
format.html { render :edit }
format.json { render json: @gen_rep_ent.errors, status: :unprocessable_entity }
end
end
end
# DELETE /gen_rep_ents/1
# DELETE /gen_rep_ents/1.json
def destroy
@gen_rep_ent.destroy
respond_to do |format|
format.html { redirect_to gen_rep_ents_url, notice: 'General Report Entry was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_gen_rep_ent
@gen_rep_ent = GenRepEnt.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def gen_rep_ent_params
params.require(:gen_rep_ent).permit(:time, :report, :general_report)
end
end
general_reports_controller: < - Родитель Item
class GeneralReportsController < ApplicationController
before_action :set_general_report, only: [:show, :edit, :update, :destroy]
# GET /general_reports
# GET /general_reports.json
def index
@general_reports = GeneralReport.all
end
# GET /general_reports/1
# GET /general_reports/1.json
def show
@general_report = GeneralReport.find(params[:id])
@gen_rep_ents = @general_report.gen_rep_ents
end
# GET /general_reports/new
def new
@general_report = GeneralReport.new
end
# GET /general_reports/1/edit
def edit
end
# POST /general_reports
# POST /general_reports.json
def create
@general_report = GeneralReport.new(general_report_params)
respond_to do |format|
if @general_report.save
format.html { redirect_to @general_report, notice: 'General report was successfully created.' }
format.json { render :show, status: :created, location: @general_report }
else
format.html { render :new }
format.json { render json: @general_report.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /general_reports/1
# PATCH/PUT /general_reports/1.json
def update
respond_to do |format|
if @general_report.update(general_report_params)
format.html { redirect_to @general_report, notice: 'General report was successfully updated.' }
format.json { render :show, status: :ok, location: @general_report }
else
format.html { render :edit }
format.json { render json: @general_report.errors, status: :unprocessable_entity }
end
end
end
# DELETE /general_reports/1
# DELETE /general_reports/1.json
def destroy
@general_report.destroy
respond_to do |format|
format.html { redirect_to general_reports_url, notice: 'General report was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_general_report
@general_report = GeneralReport.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def general_report_params
params.require(:general_report).permit(:user_id, :site_id, :date, :shift_start, :shift_end, :gp_number)
end
end
Я не слишком уверен, куда я иду неправильно с этим, как я просмотрел учебник снова и снова, и все это от того, что матчи Я вижу.
EDIT # 1
моя GenRepEnt модель выглядит следующим образом:
class GenRepEnt < ActiveRecord::Base
belongs_to :general_report
end
EDIT # 2
После выполнения миграции и добавления BELONGS_TO: general_report модели я получаю следующая погрешность:
ActiveRecord::AssociationTypeMismatch in GeneralReports::GenRepEntsController#create
Как выглядит модель 'GenRepEnt'? –
Бланки без ничего в нем. –
Было сказано, что многие из них сделают все это работой –