2017-03-26 4 views
0

Ich sehe viele Beiträge, aber ich bin mir nicht sicher, dass sie auf mein Problem zutreffen. Hauptsächlich, weil wenn ich versuche, diese Lösungen zu implementieren, bekomme ich Syntaxfehler. Ich weiß nicht, warum das so ein Problem zu sein scheint.Rails 4 verschachtelte Felder_für nicht speichern

Ich habe Profilobjekt, das eine 1: 1-Beziehung mit Benutzer hat. In der Bearbeitung des Profils möchte ich die E-Mail des Benutzers speichern. Aber es wird hier nicht sparen, ist der Code und Ausgabe ...

Ausblick:

   = semantic_form_for @profile do |f| 
       = f.inputs class: "form-group" do 
        = f.input :name, input_html: { class: "form-control" } 
        = f.input :username, input_html: { class: "form-control" } 
        = f.semantic_fields_for @profile.user do |u| 
        = u.input :email, input_html: { class: "form-control" } 

Die Paramater an die Steuerung weitergegeben werden:

{"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"iMkkLX6qN7PagmbnEQlQZ0CH5Q/fl+G9273eHFO9aRk8EG4MisEi3PwQOWocU2wp3UW5ju4DOJcUh5v19pS46A==", "profile"=>{"name"=>"John Doe", "username"=>"JohnnyD", "user"=>{"email"=>"[email protected]"}, "commit"=>"Save", "controller"=>"profiles", "action"=>"update", "id"=>"4"} 

Die Antwort der Steuerung:

Unpermitted parameter: user 

Die Whitelist:

params.require(:profile).permit(:name, :username, :user) 

Die Modelle:

class Profile < ActiveRecord::Base 
    belongs_to :user 

    accepts_nested_attributes_for :user 
end 

class User < ActiveRecord::Base 
    has_one :profile, :dependent => :destroy 
end 

Ich habe das Hinzufügen users_attributes versucht: [: E-Mail], um den Fehler erforderlich params #syntax. Ich habe versucht, Benutzer: [: E-Mail] zu den erforderlichen Prarams # Syntaxfehler Ich habe versucht mit und ohne access_nested_attributes im Modell # keine Wirkung.

Kann mir jemand einprägen, weil ich eindeutig ahnungslos bin.

Danke.

Antwort

0

Ich sehe zwei Probleme:

Erste - = f.semantic_fields_for @profile.user do |u| Sollte sein:

= f.semantic_fields_for users do |u|

(Hier können Sie Rails erzählen verwandte Datenbanktabelle holen, so sollte users Plural sein)

Und zweitens sollten starke params wirklich so sein wie du es schon versucht hast:

params.require(:profile).permit(:name, :username, users_attributes: [:email])

Ich hoffe, es behebt Ihr Problem.

+0

Ich habe die Änderungen vorgenommen, die Sie vorgeschlagen haben, aber die Whitelist gibt mir jetzt einen Syntaxfehler, den ich bekam, wenn ich versuchte, diese Änderungen vorzunehmen .../home/ubuntu/workspace/app/controllers/profiles_controller. rb: 95: Syntaxfehler, unerwartet ',', erwartet => ... s: [: email] –

+0

Die vollständige Whitelisting-Zeile ... params.require (: profile) .permit (: user_id,: name,: about ,: country_code,: state_code,: stadt,: avatar,: unternehmen,: firma_url,: username, benutzer_attribute: [: email],: online_store_url,: facebook_url,: instagram_url,: blog_url, passion_ids: []) –

+0

Ich bin umgezogen Users_Attribute an das Ende der Whitelist und hörte auf den Syntaxfehler zu bekommen, aber jetzt bekomme ich das in der Form ... undefined lokale Variable oder Methode 'Benutzer 'für # <# : 0x007f64dc020d58> weil ich die entfernt habe @ profile.user reference und ersetzte es durch Benutzer. –

Verwandte Themen