2016-12-27 4 views
0

Ich habe diesen railscast verfolgt: https://www.youtube.com/watch?v=t_FNKR7jahM für das Lernen, wie geschachtelte Attribute in meine Anwendung zu implementieren. Wenn ich seinen Code in den erforderlichen Bereichen implementiere, bekomme ich immer den gleichen NoMethod-Fehler in den Feldern. NoMethod Fehlerfelder Verschachtelte Attribute

Auf der Seite "Events", auf der Sie Songs hinzufügen können, versuche ich einen Link "Feld hinzufügen" hinzuzufügen, der eine weitere Gruppe von Songs (ein Feld für Interpret, Titel und Genre) hinzufügt.

Hier ist mein Ereignisverwalter:

class EventsController < ApplicationController 

    def new 
     @event = Event.new 
     @event.songs.build 
    end 

    def index 
     @songs = Song.all 
    end 

    def show 
     @event = Event.find(params[:id]) 
     @songs = @event.songs.paginate(page: params[:page]) 
    end 

    def create 
     @event = current_user.events.build(event_params) 
     if @event.save 
      flash[:success] = "Event Created!" 
      redirect_to user_path(@event.user) 
     else 
      render 'welcome#index' 
     end 
    end 

    def destroy 
    end 

    private 

     def event_params 
     params.require(:event).permit(:name, :partycode, song_attributes: [:artist, :title, :genre]) 
     end 
end 

Hier mein Event-Modell ist:

class Event < ApplicationRecord 
    belongs_to :user 
    has_many :songs, dependent: :destroy 
    accepts_nested_attributes_for :songs, allow_destroy: true 

    validates :name, presence: true 
    validates :partycode, presence: true, length: {minimum: 5} 
end 

Hier ist die Show-Seite, in der die Songs hinzugefügt:

<section class="song_form"> 
     <%= render 'shared/song_form' %> 
     <%= form_for @event do |f| %> 
     <%= f.fields_for :fields do |builder| %> 
      <%= render 'events/songs_fields', f: builder %> 
     <% end %> 
     <%= link_to_add_fields "Add Field", f, :fields %> 
     <% end %> 
</section> 

Hier Die Datei song_fields:

<fieldset> 
    <%= f.select :field_type, %w[text_field check_box] %> 
    <%= f.text_field :artist, placeholder: "Artist" %> 
</fieldset> 

Hier die ApplicationHelper Datei ist:

module ApplicationHelper 
    def link_to_add_fields(name, f, association) 
    new_object = f.object.send(association).klass.new 
    id = new_object.object_id 
    fields = f.fields_for(association, new_object, child_index: id) do |builder| 
     render(association.to_s.singularize + "_fields", f: builder) 
    end 
    link_to(name, '#', class: "add_fields", data: {id: id, fields: fields.gsub("\n", "")}) 
    end 
end 

Schließlich ist hier meine Ereignisse Kaffee Skriptdatei;

$(document).on 'click', 'form .add_fields', (event) -> 
    time = new Date().getTime() 
    regexp = new RegExp($(this).data('id'), 'g') 
    $(this).before($(this).data('fields').replace(regexp, time)) 
    event.preventDefault() 

Sorry für die lange Post, eine Antwort auf meine Frage wäre sehr dankbar. Lassen Sie es mich wissen, wenn Sie noch etwas von mir brauchen (beachten Sie, dass ich Schienen 5 verwende). Cheers :)

+0

"[...] die gleichen NoMethod Fehler auf den Feldern" sein? Und dieser Fehler ist? –

+0

Der Fehler, den es mir gibt ist: undefinierte Methode 'Felder 'für # Aaron

Antwort

1

Sollte

f.fields_for :songs do |builder| 
+0

Danke, dass die Felder Fehler behoben. Jetzt bekomme ich einen NoMethod-Fehler für field_type (der in meiner songs_field-Datei oben definiert ist) – Aaron

+0

Hat 'Song' ein Feld namens' field_type'? – Iceman

+0

Nein, nicht, wie würde ich das für mein Lied definieren? – Aaron

Verwandte Themen