0

In meiner app ich Ereignisse erstellen möchten, die name und price In diesen Fällen habe ich in der Lage sein wollen Teilnehmer hinzufügen sie haben eine first_name und ein salaryStarke params nicht in verschachtelten Form gespeichert

ich bin mit dem Juwel Cocoon für die verschachtelten Formen

Vom EventsController ich versuche, meine Teilnehmer zu schaffen ...

ich es nicht schaffen, den richtigen Weg zu bekommen diese ...

EventsController

class EventsController < ApplicationController 
    def new 
    @event = Event.new 
    @participant = Participant.new 
    end 

    def create 
    @event = Event.create(params_event) 
    if @event.save 
     @event.participants.create([{first_name: params[:first_name], salary: params[:salary], event_id: params[:id]}]) 
     #binding.pry 
     redirect_to @event 
    end 
    end 

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

    private 

    def params_event 
    params 
     .require(:event).permit(:name,:total_price, 
     participants_attributes: [:first_name, :salary, :_destroy ]) 
    end 
end 

ich tun möchte, dass meine schaffen Methode wie diese eine Reihe von Teilnehmern im gegebenen Fall machen ...

@event.participants.create!([john={first_name: "John", salary: 2000, event_id: params[:id]}, mike={first_name: "Mike", salary: 1400, event_id: params[:id]}])

Hier ist das Ergebnis der Bindung .pry

8: def create 
    9: @event = Event.create(params_event) 
    10: if @event.save 
    11: @event.participants.create([{first_name: params[:first_name], salary: params[:salary], event_id: params[:id]}]) 
    12: #@event.participants.create!([john={first_name: "John", salary: 2000, event_id: params[:id]}, mike={first_name: "Mike", salary: 1400, event_id: params[:id]}]) 
    13: binding.pry 
=> 14:  redirect_to @event 
    15: end 
    16: end 

[1] pry(#<EventsController>)> 
[1] pry(#<EventsController>)> @event 
=> #<Event:0x007f89f8013c98 
id: 67, 
name: "Rent a plane", 
total_price: 3400, 
created_at: Mon, 13 Mar 2017 01:18:24 UTC +00:00, 
updated_at: Mon, 13 Mar 2017 01:18:24 UTC +00:00> 
[2] pry(#<EventsController>)> @event.participants 
    Participant Load (0.2ms) SELECT "participants".* FROM "participants" WHERE "participants"."event_id" = $1 [["event_id", 67]] 
=> [#<Participant:0x007f89f6773580 
    id: 30, 
    first_name: nil, 
    salary: nil, 
    created_at: Mon, 13 Mar 2017 01:18:24 UTC +00:00, 
    updated_at: Mon, 13 Mar 2017 01:18:24 UTC +00:00, 
    event_id: 67>] 

Wenn meine Modelle hier sind neeeded:

class Event < ApplicationRecord 
    has_many :participants, dependent: :destroy 
    accepts_nested_attributes_for :participants, reject_if: :all_blank, allow_destroy: true 
end 

class Participant < ApplicationRecord 
    belongs_to :event 
end 

Und meine Formen:

new.html.erb

<%= simple_form_for @event do |f| %> 
      <%= f.input :name, label: "Event's name" %> 
      <%= f.input :total_price, label: "What is the total price" %> 
      <h2> Add your friends to share the bill</h2> 
      <%= f.simple_fields_for :participants do |participant| %> 
       <%= render "events/participants_fields", f: participant %> 
      <% end %> 
      <%= link_to_add_association 'add a friend', f, :participants, partial: "events/participants_fields", class:"btn btn-primary" %> 
      <%= f.button :submit %> 
    <% end %> 

Teil: _participants_fields .html.erb

<div class='nested-fields participant-background'> 
    <%= f.input :first_name, label: "Enter your friend's first name" %> 
    <%= f.input :salary, label: "Enter his/her monthly pay" %> 
    <%= link_to_remove_association "Remove this friend", f , class: "btn btn-danger btn-xs" %> 
</div> 

EDIT

Dies sind meine Protokolle, wenn ich eine Veranstaltung mit Teilnehmern schaffen sie nicht gespeichert werden: (Ich hielt gerade die @Event = Event.new (params_event)

tarted GET "/" for ::1 at 2017-03-13 13:55:20 +0100 
    ActiveRecord::SchemaMigration Load (7.0ms) SELECT "schema_migrations".* FROM "schema_migrations" 
Processing by EventsController#new as HTML 
    User Load (0.6ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 1], ["LIMIT", 1]] 
    Rendering events/new.html.erb within layouts/application 
    Rendered events/_participants_fields.html.erb (5.8ms) 
    Rendered events/new.html.erb within layouts/application (98.6ms) 
    Rendered shared/_navbar.html.erb (2.5ms) 
    Rendered shared/_flashes.html.erb (0.4ms) 
Completed 200 OK in 408ms (Views: 358.0ms | ActiveRecord: 20.9ms) 


Started POST "/events" for ::1 at 2017-03-13 13:55:48 +0100 
Processing by EventsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"mMuWIZe06ofG6DCafY2EPrJouIcF4YzKKJx6Y9ct5XUZNHqIyvFY4l3dqiEnxC5NhQapvSnFDukgblJnHg+14g==", "event"=>{"name"=>"Rent a van", "total_price"=>"390"}, "commit"=>"Create Event"} 
    User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 1], ["LIMIT", 1]] 
    (0.1ms) BEGIN 
    SQL (11.9ms) INSERT INTO "events" ("name", "total_price", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [["name", "Rent a van"], ["total_price", 390], ["created_at", 2017-03-13 12:55:48 UTC], ["updated_at", 2017-03-13 12:55:48 UTC]] 
    (6.0ms) COMMIT 
    (0.2ms) BEGIN 
    (0.2ms) COMMIT 
Redirected to http://localhost:3000/events/93 
Completed 302 Found in 25ms (ActiveRecord: 18.6ms) 


Started GET "/events/93" for ::1 at 2017-03-13 13:55:48 +0100 
Processing by EventsController#show as HTML 
    Parameters: {"id"=>"93"} 
    User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 1], ["LIMIT", 1]] 
    Event Load (0.4ms) SELECT "events".* FROM "events" WHERE "events"."id" = $1 LIMIT $2 [["id", 93], ["LIMIT", 1]] 
    Rendering events/show.html.erb within layouts/application 
    Participant Load (0.5ms) SELECT "participants".* FROM "participants" WHERE "participants"."event_id" = $1 [["event_id", 93]] 
    Rendered events/show.html.erb within layouts/application (3.1ms) 
    Rendered shared/_navbar.html.erb (3.3ms) 
    Rendered shared/_flashes.html.erb (0.8ms) 
Completed 200 OK in 41ms (Views: 34.1ms | ActiveRecord: 1.5ms) 
+0

Hallo und willkommen zu Stack Overflow. 'accresents_nested_attributes' sollte" Just Work "mit der Zeile' @event = Event.create (params_event) '- Sie sollten Ihre Teilnehmer nicht manuell so erstellen müssen, wie Sie es versuchen. Du scheinst die korrekten Feldnamen in deiner 'permit' /' require' Zeile zu haben ... kannst du uns also sagen, was du beobachtest, wenn du das gerade machst? Erhalten Sie Fehlermeldungen? Können Sie in Ihrem Logfile nachsehen und uns sagen, was in Params (und alle unzulässigen Params?) Passieren? –

+0

Vielen Dank :) Ich habe meine Protokolle eingefügt ...Ich habe keinen Fehler, aber keine Teilnehmer gespeichert :( – Liwis

Antwort

1

Das Problem war in meinen Formen .... Cocoon benötigen spezielle div

<div class="container"> 
    <div class="col-xs-12"> 
    <%= simple_form_for @event do |f| %> 
     <%= f.input :name, label: "Event's name" %> 
     <%= f.input :total_price, label: "What is the total price" %> 
     <h2> Add your friends to share the bill</h2> 
     <div id="participants"> 
      <%= f.simple_fields_for :participants do |participant| %> 
      <%= render "events/participants_fields", f: participant %> 
      <% end %> 
     </div> 
     <div class="links"> 
      <%= link_to_add_association 'add a friend', f, :participants, partial: "events/participants_fields", class:"btn btn-primary" %> 
     </div> 
     <%= f.button :submit %> 
    <% end %> 
</div> 
</div> 

Ich habe den Controller wie folgt gereinigt:

+0

"Cocoon braucht spezielle div" Ooh, das ist seltsam (und ein bisschen brüchig):/Gut zu hören Sie es gelöst :) Nach einem Tag oder so, können Sie Ihre eigene Antwort markieren als die "akzeptierte Antwort", was bedeutet, dass andere Leute sehen können, dass Ihr Problem gelöst wurde ... es ist hilfreich für jeden anderen, der über das gleiche Problem stolpert und sich fragt, ob Sie eine Lösung haben oder nicht :) –

Verwandte Themen