2016-11-01 3 views
1

Ich habe mehrere Lessons und die meisten von ihnen haben einige Voraussetzungen, die selbst andere Lektionen sind. Das Prerequisite Modell stellt die Beziehung dar und jeder hat eine lesson_id und prerequisite_lesson_id.Erstelle assoziiertes Objekt aus der Sammlung wählen

class Lesson < ApplicationRecord 
    has_many :prerequisites 
    has_many :prerequisite_lessons, :through => :prerequisites 
end 

class Prerequisite < ApplicationRecord 
    belongs_to :lesson 
    belongs_to :prerequisite_lesson, :class_name => "Lesson" 
end 

Ich versuche, einen Weg, um herauszufinden, so dass:

  • Wenn ich eine neues Lesson erstellen und wählen Sie eine oder mehr Voraussetzungen von einem collection_select
  • mehr Prerequisite Objekte erstellt werden, basierend auf was ausgewählt wurde, wobei die lesson_id die erstellte Lesson ID ist.

Hier ist ein Teil meiner Lektion Controller:

def create 
    @lesson = Lesson.new(lesson_params) 

    if @lesson.save 
    if @lesson.prerequisite_ids.length > 0 
     @lesson.prerequisite_ids.each do |p| 
     Prerequisite.new(lesson_id: @lesson.id, prerequisite_lesson_id: p) 
     end 
    end 
    flash[:notice] = "Lesson created..." 
    redirect_to root_url 
    else 
    render :new 
    end 
end 

... 

def lesson_params 
    params.require(:lesson).permit(
    :name, 
    :high_tempo, 
    :low_tempo, 
    :interval, 
    :advance_tempo, 
    prerequisites_attributes: [ 
     :lesson_id, 
     :prerequisite_lesson_id 
    ] 
) 
end 

und meine Form:

<%= f.collection_select(:prerequisite_ids, Lesson.all, :id, :name, {}, {:multiple => true}) %> 

UPDATE:

In den Protokollen, ich sehe:

"Lektion" => {"Name" => "Lektion 6", "high_tempo" => "200", "low_tempo" => "100", "Intervall" => "10", "advance_tempo" => "140", "voraussetzung_ids" => [ "", "3", "4"]}, "commit" => "speichern"} Unzulässige Parameter: prerequisite_ids'`

Antwort

0

Es sieht aus wie es ein paar Probleme sind hier:

Eine davon ist, dass Sie Prerequisite.new(...) verwenden, wenn ich glaube, Sie wollen, sollten also Prerequisite.create(...)

mit zu Ihrer erstellen Aktion sein:

def create 
    @lesson = Lesson.new(lesson_params) 

    if @lesson.save 
    if @lesson.prerequisite_ids.length > 0 
     @lesson.prerequisite_ids.each do |p| 
     Prerequisite.create(lesson_id: @lesson.id, prerequisite_lesson_id: p) 
     end 
    end 
    flash[:notice] = "Lesson created..." 
    redirect_to root_url 
    else 
    render :new 
    end 
end 

Das andere ist dies (von Ihrem Stamm):

"Lektion" => { "name" => "Lektion 6", "high_tempo" => "200", "low_tempo" => "100", "interval" => "10", "advance_tempo" => "140", "voraussetzung_ids" => ["", "3", "4"]}, "commit" => " speichern "} Unzulässige Parameter: prerequisite_ids'`

In Ihrem Controller, Sie erlauben

def lesson_params 
    params.require(:lesson).permit(
    :name, 
    :high_tempo, 
    :low_tempo, 
    :interval, 
    :advance_tempo, 
    prerequisites_attributes: [ 
     :lesson_id, 
     :prerequisite_lesson_id 
    ] 
) 
end 

Aber beachten Sie, dass Ihre aktuellen Daten als "lesson" => {..., "prerequisite_ids"=>["", "3", "4"]}

kommen in ist

So sollten Sie stattdessen wie dies zulassen: Zusätzlich

def lesson_params 
    params.require(:lesson).permit(
    :name, 
    :high_tempo, 
    :low_tempo, 
    :interval, 
    :advance_tempo, 
    prerequisite_ids: [] 
) 
end 

, sieht es aus wie Ihre prerequisite_ids Wert sind inklusive, die eine leere Zeichenfolge ist.Basierend auf this post, es sieht aus wie Sie benötigen include_hidden: true zu Ihrem wählen Tag hinzuzufügen, wie folgt aus:

<%= f.collection_select(:prerequisite_ids, Lesson.all, :id, :name, {}, {:multiple => true, include_hidden: true}) %> 
+0

Dies ist, was im Protokoll ich sehe: ‚Parameter: {‚UTF-8‘=>“ ✓ "," authenticity_token "=>" THaOnTF4jPv6duqqyxRMP7IIfpEPS9MrFJ5Ib50WohwyvP8dd085P0UQeD47jW2a65tI3eNeHVU0IZwL6hYpWw == "," Lektion "=> {" name "=>" Lektion 6 "," high_tempo "=>" 200 "," low_tempo "=>" 100 "," Intervall "=>" 10 "," advance_tempo "=>" 140 "," vorausgesetzte_ids "=> [" "," 3 "," 4 "]}," commit "=>" Speichern "} Unerreichter Parameter: preventive_ids ' – AHinson

+0

Ich habe meine Antwort aktualisiert, um ein anderes Problem anzugehen, von dem ich glaube, dass Sie es sehen. – BananaNeil

+0

Ich habe immer noch den gleichen "Unerreichter Parameter" -Fehler. – AHinson

Verwandte Themen