2016-12-31 10 views
0

私のネストされた属性に問題があります。誰かが自分のウェブサイトにアクセスしてイベントに曲を追加できるようにしたい。彼らは、そのイベントのパーティコードを提供する場合に限り、それらの曲を追加することができます。私はネストされた属性を正しく設定しましたが、私は許容されないパラメータエラーを受けています。許容されないパラメータ: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> 

このリンクを追加すると、ユーザーはログインしていません。 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ページでドロップダウンメニューからイベントを選択し、オンデマンドで曲のフィールドを追加してから、選択した特定のイベントのパーティコードを入力することができます。これについての助けは素晴らしいでしょう!おかげ

EDITエラー:あなたのEventsController

undefined method `events' for nil:NilClass 
+0

を次のようにEventsControllerであなたのevent_params方法をincorrect.Change綴ら

、間違った個別化/複数形があるように思われます。 'event.rb'と' song.rb'も投稿してください。 – 31piy

答えて

1

、あなたのネストされたparamsがevent_params方法

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

song_attributesとして綴られている。しかし、あなたのエラーがunpermitted parameter: songs_attributesを言います。あなたはどこか、あなたのコード内の

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

関連する問題