2016-07-26 11 views
1

Ich habe ActiveRecord-Modell mit persistent Name Attribut und das virtuelle Attribut.Rails starke Parameter - Akzeptieren des virtuellen Attributs

class MyModel < ActiveRecord::Base 
validates :name, length: { minimum: 1 }, presence: true 

def virtual_attr=(value) 
    # set something 
end 

def virtual_attr 
    # get something 
end 
end 

In meinem Controller ich stark Parameter am Angabe:

def my_model_params 
    params.permit(:name, :virtual_attr) 
    end 

Wenn ich versuche, mein Modell zu erstellen/aktualisieren, enthält my_model_params nur einen Namen, während ich weiß, dass params[:virtual_attr] den Wert hat, dass ich an den Controller übergeben. Es scheint, als ob es nur herausgefiltert wird. Was mache ich falsch?

+1

Sie bitte nach, was params Sie bekommen auf der Konsole komplett params Hash –

+0

@Deepak hier ist params-Hash : '{" name "=>" Neu "," virtual_attr "=> {" enable "=>" false "," start "=>" false "}," controller "=>" mein_modell "," action "= > "create"} '. Es ist alles da – alexs333

Antwort

4

Nach diesen params

{"name"=>"New", "virtual_attr"=>{"enable"=>"false", "start"=>"false"}, "controller"=>"my_model", "action"=>"create"} 

Sie müssen stark params ändern:

def my_model_params 
    params.permit(:name, virtual_attr: [:enable, :start]) 
end