2016-12-31 5 views
0

У меня проблема с моими вложенными атрибутами. Я хочу, чтобы кто-то мог просто посетить мой сайт и добавить песни на мероприятие. Они могут добавлять только эти песни, если они поставляют partycode для этого события. Я правильно настроил свои вложенные атрибуты, но я получаю непредвиденную ошибку параметра.Параметр unpermitted: songs_attributes

События Контроллер:

class EventsController < ApplicationController 
    def new 
     @event = Event.new 
     @event.songs.build 
    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, :partycode]) 
     end 
end 

application_controller:

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
    include SessionsHelper 
end 

Вот new.html.erb файл в песнях просмотра, который содержит код для добавления песни в случае, обратите внимание, что пользователь не подписывается, когда они добавляют песни:

<br> 
<br> 
<div class ="container"> 
    <div class="jumbotron"> 
    <%= form_for Event.new do |f| %> 
    <h3>Enter a song:</h3> 
    <%= f.fields_for :songs, Song.new do |song_form| %> 

     <%= song_form.collection_select(:event_id, Event.all, :id, :name) %> 
     <%= song_form.text_field :artist, placeholder: "Artist" %> 
     <%= song_form.text_field :title, placeholder: "Title" %> 
     <%= song_form.text_field :genre, placeholder: "Genre" %> 
    <% end %> 
    <%= link_to_add_fields "Add Song", f, :songs %> 
    <%= f.text_field :partycode %> 
    <%= f.submit "Submit", class: "btn btn-primary" %> 
    <% end %> 
    </div> 
</div> 

Ссылка_to_add_fields metho d находится в файле application_helper.rb:

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("songs_fields", f: builder) 
    end 
    link_to(name, '#', class: "add_fields", data: {id: id, fields: fields.gsub("\n", "")}) 
    end 
end 

songs_field парциальное определяется следующим образом:

<fieldset> 
    <%= f.text_field :artist, placeholder: "Artist" %> 
    <%= f.text_field :title, placeholder: "Title" %> 
    <%= f.text_field :genre, placeholder: "Genre" %> 
</fieldset> 

кофе-скрипт, который добавляет поля:

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

человек из на странице new.html.erb вы можете выбрать событие из выпадающего меню, а затем по требованию добавить дополнительные поля для песни, а затем ввести partycode для определенного события, которое они выбрали. Любая помощь в этом была бы фантастической! Благодаря ошибка

EDIT:

undefined method `events' for nil:NilClass 
+0

Где-то в вашем коде, там, кажется, неправильно сингуляризация/плюрализация. Пожалуйста, напишите 'event.rb' и' song.rb'. – 31piy

ответ

1

В вашем EventsController, ваш вложенный PARAMS пишется, как song_attributes в event_params методы

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

Но ваша ошибка говорит unpermitted parameter: songs_attributes.

Вы видите это incorrect.Change ваш метод event_params в EventsController следующим

private 
    def event_params 
    params.require(:event).permit(:name, :partycode, songs_attributes: [:artist, :title, :genre, :partycode]) 
    end 
+0

После определения этого, я получаю сообщение об ошибке, в котором говорится, что мой пользователь не подписан. Мне не нужно, чтобы пользователь был подписан, должен ли я? Ошибка в моих контроллерах событий – Aaron

+0

Можете ли вы обновить вопрос с помощью кода «ApplicationController» и фрагмента ошибки? – Pramod

+0

Отредактировано, @Pramod – Aaron