Ich habe ein Formular für mein GameDate-Modell und das RefereeStat-Modell verschachtelt. Sie sind mit has_many association verbunden. Ohne Verschachtelung sparen beide Modelle. Aber in verschachtelter Form speichert meine App sie nicht. Ich vermute, dass das Problem in Form ist, wahrscheinlich in Verbindung mit Vitrine Controller, aber ich kann es nicht herausfinden.Warum funktioniert mein verschachteltes Formular nicht?
Dies ist Ausgabe von der Konsole:
POST Started "/ game_dates" für 127.0.0.1 bei 2016.03.24 20.38.07 0.100 Verarbeitung von GameDatesController # erstellen als HTML-Parameter: { "UTF-8" => "✓", "authenticity_token" => "umpbTCZekqIU/g6uVdlde9fSubutgLk0Qrbb0e5GCdn3qj4/C0tmlxl/akxaM1Vmr6v8dNB8b88ATpRN8v1U2g ==", "game_date" => { "date (1 i)" => "2016", das Datum“(2i) "=>" 3 "," Datum (3i) "=>" 24 ", " referee_stats_attributes "=> {" 0 "=> {" games_count "=>" 3 ", " showcase_id "=>" 10 "}}}," commit "=>" Spieldatum erstellen "} User Load (0.8ms) SELECT "Benutzer". * FROM "Benutzer" WHERE "Benutzer". "ID" = $ 1 ORDER BY "Benutzer". "ID" ASC LIMIT 1 [["ID", 1]] (0.4ms) BEGIN (0.3ms) ROLLBACK Showcase Laden (0.8ms) SELECT "showcases". * Von "showcases" Gerendert game_dates/_form.html.haml (22.4ms) Gerendert game_dates/new.html.haml in Layouts/Anwendung (23,9ms)
Gerenderte Layouts/_header.html.haml (0,7ms) Gerendert shared/_flash.html.haml (0,2ms) Fertig 200 OK in 148ms (Views: 138.5ms | Active: 2,2 ms)
Dies ist GameDate Modell:
class GameDate < ActiveRecord::Base
validates :date, presence: true
has_many :referee_stats
accepts_nested_attributes_for :referee_stats, :reject_if => :all_blank
end
Spiel Datum Controller:
class GameDatesController < ApplicationController
before_action :authenticate_user!
before_action :user_is_admin
def new
@game_date = GameDate.new
@game_date.referee_stats.build
end
def create
@game_date = GameDate.new(game_date_params)
if @game_date.save
redirect_to showcases_path
flash[:success] = "Game date created"
else
render 'new'
end
end
def show
@game_date = GameDate.find(params[:id])
end
def destroy
@game_date = GameDate.find(params[:id]).destroy
redirect_to root_url
flash[:success] = "Game date deleted"
end
private
def game_date_params
params.require(:game_date).permit(:date, referee_stats_attributes: [ :games_count, :showcase_id ])
end
def user_is_admin
unless current_user.admin?
flash[:error] = "You don't have permission to perform this action!"
redirect_to root_url
end
end
end
Schiedsrichter stat Modell:
class RefereeStat < ActiveRecord::Base
validates :games_count, presence: true, numericality: {
only_integer: true,
greater_than_or_equal_to: 0 }
validates :showcase_id, presence: true
validates :game_date_id, presence: true
belongs_to :showcase
belongs_to :game_date
end
Form:
.container
.row
.col-md-6.col-md-offset-3
= simple_form_for @game_date do |f|
= f.error_notification
%h2.text-center Game date
= f.input :date
= f.simple_fields_for :referee_stats do |r|
%h3.text-center Referee statistics
= r.input :games_count
= r.association :showcase, label_method: :name, value_method: :id, include_blank: false
= f.button :submit, class: "btn btn-primary btn-sm"
ersetzen Sie 'f.simple_fields_for: referee_stats do | r |' mit 'f.simple_fields_for @ game_date.referee_stats do | r |' Es sollte funktionieren. –
ODER nur das Entfernen von "@ game_date.referee_stats.build" im Controller löst diese Situation ebenfalls. –
@MuhammadYawarAli, wenn ich die Felder '@ game_date.referee_stats.build' für referee_stats deasapear entfernt habe. Wenn ich mein Formular mit Ihrer ersten Empfehlung ändere, habe ich diesen Fehler erhalten "undefinierte Methode' has_attribute? ' für # " –
Nekron