2016-07-20 29 views
0

Ich verwende Rails 4.2.4. In meinem Controller habe ich dieseIn RoR, wie vermeide ich diesen "unerlaubten Parameter" beim Absenden meines Formulars?

def update 
    @user = current_user 
    if @user.save_with_address(user_params) 
    … 
    end 

    private 

    def user_params 
     params.require(:user).permit(:first_name, :last_name, :dob, :address, :automatic_import) 
    end 

und in meinem Modell (basierend auf meiner „Benutzer“ Tabelle, in der ich eine „users.address_id“ Spalte haben), ich habe diese

class User < ActiveRecord::Base 
    belongs_to :address 
    attr_accessor :address 

aber wenn ich meine Form zu meiner „Update“ Methode mit den folgenden Daten (siehe oben)

Parameters: {"utf8"=>"✓", "authenticity_token"=>”tjLutbCuZUmLImSRnoRUCtcG8O0u070YixqjnMm5hmAZhn94fFte4jpWgB4hoOstiP9vJTj/c081EJ8NYnbMvg==", "user"=>{"first_name"=>"D.", "last_name"=>”LastName”, "dob(2i)"=>"", "dob(3i)"=>"", "dob(1i)"=>"", "address"=>{"city"=>"golden", "state"=>"3547", "country"=>"0"}, "automatic_import"=>"0"}, "commit"=>"Save", "id"=>"1"} 

ich erhalte einen „Unzulässige Parameter: Adresse“ angezeigt, wenn mein „user_params“ Funktion wird aufgerufen, und meine Adresse Objekt isn‘ t als Teil meines Benutzerobjekts gespeichert. Was muss ich anders strukturieren, um dies zu vermeiden?

Antwort

0

Da Adresse ein Hash ist, müssen Sie alle ihre einzelnen Felder angeben.

params.require(:user).permit(:first_name, :last_name, address: [:city, :state, :country]) 
+0

Wenn ich die Zeile auf "params.require (: user) .permit (: first_name,: last_name,: dob, Adresse: [: Stadt,: Zustand: Land]: automatic_import)", Ich bekomme den Fehler "Syntaxfehler, unerwartet"), erwartet => ". Ich habe den "adresse:" block ausgeschnitten und eingefügt du hast also nicht sicher was ich verpasst habe. – Dave

+0

Adresse muss in diesem Fall der letzte Parameter sein. –