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 :)
"[...] die gleichen NoMethod Fehler auf den Feldern" sein? Und dieser Fehler ist? –
Der Fehler, den es mir gibt ist: undefinierte Methode 'Felder 'für # –
Aaron