2013-07-26 13 views
12

मैं मेरे विचार में यह है जो एक एकाधिक चयन करें चेकबॉक्समजबूत पैरामीटर सरणी

मॉडल

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 

दृश्य

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

मजबूत यह है के लिए मानकों को स्वीकार नहीं है

के रूप में लिखा गया
def user 
    params.require(:user).permit(:first_name,{:role_ids => []}) 
    end 

लेकिन पर बनाने के यह कहते

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 

कोई सुराग क्यों यह role_ids जो फार्म से आ रही है की सरणी को स्वीकार नहीं कर रहा है?

उत्तर

7

अपने आप का जवाब काम करना चाहिए, मैं इसे सीधे नहीं काम कर रहा है, लेकिन Strong Parameters issues discussion से नीचे दी गई विधि मुझे एक श्वेत सूचीबद्ध एक के लिए एक सामान्य पैरामीटर परिवर्तित करने में मदद की।

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

यह

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

अच्छी तरह से मैं इस तरह से भी करने की कोशिश की .. यह काम नहीं किया .. – AnkitG

+0

पेस्ट अपने बनाने के विधि कृपया – Benj

+0

एक GIST [यहां] बनाया (https://gist.github.com/ankit8898/6088035)। कृपया एक नज़र डालें – AnkitG

21

रेल Strong Parameters documentation regarding nested attributes देखें।

सही स्वरूप है:

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

AnkitG's solution रेल 4 में मेरे लिए काम किया मेरे उपयोगकर्ता मॉडल के लिए Role Model मणि का उपयोग कर। _params मेरे उपयोगकर्ता नियंत्रक के कार्यान्वयन को समाप्त की तरह लग रही:

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

मेरे लिए काम किया। धन्यवाद! –

संबंधित मुद्दे