2013-07-25 16 views
49

के लिए अप्रयुक्त पैरामीटर्स मेरे पास मेरे मॉडल में एक सरणी फ़ील्ड है और मैं इसे अपडेट करने का प्रयास कर रहा हूं।रेल 4 एरे

मेरे मजबूत पैरामीटर विधि से नीचे है

def post_params 
    params["post"]["categories"] = params["post"]["categories"].split(",") 

    params.require(:post).permit(:name, :email, :categories) 
end 

मेरी नियंत्रक में मेरी कार्रवाई के रूप में

def update 
    post = Post.find(params[:id] 

    if post and post.update_attributes(post_params) 
    redirect_to root_url 
    else 
    redirect_to posts_url 
    end 
end 

इस प्रकार बहरहाल, जब भी मैं अद्यतन पोस्ट प्रस्तुत, मेरे विकास लॉग में मैं

देखना है
Unpermitted parameters: categories 

के माध्यम से पारित पैरामीटर
Parameters: {"utf8"=>"✓", "authenticity_token"=>"auth token", "id"=>"10", 

"post"=>{"name"=>"Toni Mitchell", "email"=>"[email protected]", "categories"=>",2"}} 

मुझे लगता है कि यह इस तथ्य के साथ कुछ करने के लिए है कि विशेषता categories एक सरणी है क्योंकि बाकी सबकुछ ठीक दिखता है। फिर दोबारा, शायद मैं गलत हूं। तो, मेरे कोड में क्या गड़बड़ है और मुझे श्रेणियों के क्षेत्र को क्यों सहेजने की अनुमति नहीं दे रही है जब स्पष्ट रूप से ऐसा करने की अनुमति है? धन्यवाद।

+0

यह की वजह से करने के लिए यदि आप श्रेणियों के पैरामीटर का मान सेट कर रहे हैं iirc पैरामीटर वस्तु एक सरल हैश नहीं है हो सकता है, आप की कोशिश की है एक सरल उदाहरण? – Slicedpan

उत्तर

126

प्रयास करें इस

params.require(:post).permit(:name, :email, :categories => []) 

(मेरी टिप्पणी पर ध्यान न, मुझे नहीं लगता कि कि मायने रखती है)

+1

नमस्ते, मुझे एक समस्या है बोली (# 69846105528920) अपेक्षित है, स्ट्रिंग मिला है (# 8248680) – kalelc

+0

हाय वहाँ, सरणी में श्रेणियों के आधार पर एक पोस्ट खोजने का कोई तरीका है, उदाहरण 'Post.find_by (टैग:' खेल ') '? –

+4

यह भी समझाएगा कि यह क्यों काम करता है @slicedpan –

8

अनुमति दी अदिश प्रकार के होते हैं String, Symbol, NilClass, Numeric, TrueClass, FalseClass, Date, Time , DateTime, StringIO, IO, ActionDispatch::Http::UploadedFile और Rack::Test::UploadedFile

घोषित करने के लिए कि पैरामीटर में मान होना चाहिए की अनुमति दी अदिश मूल्यों की एक सरणी एक खाली सरणी की कुंजी नक्शा:

params.require(:post).permit(:name, :email, :categories => []) 

मुझे आशा है कि:

params.permit(:id => []) 

यह वही है strong parameters documentation on Github कहते है यह आपके लिए काम करता है।

37
रेल 4 में

, कि हो सकता है,

params.require(:post).permit(:name, :email, {:categories => []}) 
+4

यह मेरे लिए काम करता है लेकिन मॉडल में उस विशेषता के क्रमिकरण को पहले से परिभाषित करने के लिए इसे एक अलग हैश में क्यों होना चाहिए? – barnett

1

मैं एक ही समस्या थी लेकिन मेरे मामले में मैं भी था से बदलने के लिए:

<input type="checkbox" name="photographer[attending]" value="Baku">

रहे हैं:

<input type="checkbox" name="photographer[attending][]" value="Baku">

आशा है कि यह मदद कर रहा है omeone।

1

मुझे एक ही समस्या थी, लेकिन बस अनुमति देने के लिए सरणी जोड़ना पर्याप्त नहीं था। मुझे भी प्रकार जोड़ना पड़ा। इस तरह:

params.require(:transaction).permit(:name, :tag_ids => [:id]) 

मुझे यकीन है कि अगर यह सही समाधान है, लेकिन उसके बाद, 'unpermitted मापदंडों' लॉग गायब नहीं हूँ।

मैं इस उत्कृष्ट पद से कि समाधान के लिए संकेत मिले: http://patshaughnessy.net/2014/6/16/a-rule-of-thumb-for-strong-parameters