2013-07-26 7 views
12

mam to moim zdaniem których jest to wielokrotny checkboxmocne parametry nie akceptując tablicę

model

class User < ActiveRecord::Base 
    has_many :user_roles, :dependent => :destroy 
    accepts_nested_attributes_for :user_roles, :allow_destroy => true 
    has_many :roles, :through => :user_roles 
end 

zobacz

<%= check_box_tag 'user[role_ids][]', role.id, user.blank? ? nil : user.roles.include?(role) ,id: dom_id(role)%> 

mocne parametry to napisane jako

def user 
    params.require(:user).permit(:first_name,{:role_ids => []}) 
    end 

Ale na stworzenie mówi

Processing by Admin::UsersController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"+y8iWya5KIILqS0embEUEZuClycXq0O9Q4pA+MnbM0g=", "user"=>{"first_name"=>"", "last_name"=>"", "email"=>"[email protected]", "language"=>"en", "access_level_id"=>"1", "role_ids"=>["", "1", "", "5", "", "", ""], "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Create user"} 

Unpermitted parameters: role_ids 
Unpermitted parameters: role_ids 
Unpermitted parameters: role_ids 
Unpermitted parameters: role_ids 

Każdy trop dlaczego nie akceptując tablicę role_ids który pochodzi z postaci?

Odpowiedz

7

Odpowiadając sobie, mam to działa nie bezpośrednio, ale poniżej metoda z Strong Parameters issues discussion pomógł mi w konwersji normalny parametr na białej liście jeden.

def user_params 
    params.require(:user).permit(:first_name).tap do |whitelisted| 
    whitelisted[:role_ids] = params[:user][:role_ids] 
    end 
end 
8

To powinno działać

params.require(:user).permit(:first_name, :role_ids => []) 
+1

dobrze Próbowałem w ten sposób zbyt .. to nie działa .. – AnkitG

+0

wklej Twój tworzyć metoda pls – Benj

+0

stworzył GIST [tutaj] (https://gist.github.com/ankit8898/6088035). Proszę spojrzeć na – AnkitG

21

Zobacz szyny Strong Parameters documentation regarding nested attributes.

Prawidłowy format:

params.permit(:name, {:roles => []}, ...) 

AnkitG's solution pracował dla mnie w Rails 4 Korzystanie z Role Model gem dla mojego modelu użytkownika. realizacja mojego kontrolera autora z _params skończyło się patrząc jak:

def user_params 
    # Bug with permit for nested arrays... @see https://stackoverflow.com/a/17880288/2631472 
    params.require(:user).permit(:first_name, :last_name, :middle_name).tap do |whitelisted| 
    whitelisted[:roles] = params[:user][:roles] 
    end 
end 

+0

Pracowałem dla mnie. Dzięki! –

Powiązane problemy