मेरे पास एक मानक रीस्टफुल नियंत्रक है जो मजबूत पैरामीटर का उपयोग करता है।कैनकन load_and_authorize_resource ट्रिगर किए गए गुण
class UsersController < ApplicationController
respond_to :html, :js
def index
@users = User.all
end
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def edit
@user = User.find(params[:id])
end
def create
@user = User.new(safe_params)
if @user.save
redirect_to @user, notice: t('users.controller.create.success')
else
render :new
end
end
def update
@user = User.find(params[:id])
if @user.update_attributes(safe_params)
redirect_to @user, notice: t('users.controller.update.success')
else
render :edit
end
end
def destroy
@user = User.find(params[:id])
if current_user != @user
@user.destroy
else
flash[:error] = t('users.controller.destroy.prevent_self_destroy')
end
redirect_to users_url
end
private
def safe_params
safe_attributes =
[
:first_name,
:last_name,
:email,
:password,
:password_confirmation,
]
if current_user.is?(:admin)
safe_attributes += [:role_ids]
end
params.require(:user).permit(*safe_attributes)
end
end
मेरी config/initializers
में मैं जब मैं कैनकैन के load_and_authorize_resource
के लिए एक सरल कॉल जोड़ने फ़ाइल strong_parameters.rb
ActiveRecord::Base.send(:include, ActiveModel::ForbiddenAttributesProtection)
है मैं
1) UsersController POST create with invalid params re-renders the 'new' template
Failure/Error: post :create, user: @attr
ActiveModel::ForbiddenAttributes:
ActiveModel::ForbiddenAttributes
# ./spec/controllers/users_controller_spec.rb:128:in `block (4 levels) in <top (required)>'
कहाँ परीक्षा में @attr
before(:each) do
@attr =
{
first_name: "John",
last_name: "Doe",
email: "[email protected]",
password: "foobar",
password_confirmation: "foobar"
}
end
परीक्षणों में मेरे पास उपयोगकर्ता को लॉगिन करने के लिए सभी सेटअप ठीक से हैं और उन्हें व्यवस्थापक होने के लिए आवश्यक भूमिकाएं दें, इसलिए मुझे पता है कि यह ऐसा नहीं है। मुझे नहीं पता कि यह क्यों फॉरबिडन एट्रिब्यूट ट्रिगर करने का कारण बन रहा है। मुझे यकीन है कि यह कुछ आसान है जिसे मैंने अनदेखा कर दिया है। क्या किसी और को इस समस्या का सामना करना पड़ा है और इसका समाधान मिला है?
मेरा मानना है कि मैं एक ही मुद्दा हो रहा है। क्या आप अपने समाधान को और स्पष्ट करने के बारे में सोचेंगे? –
यह थोड़ी देर हो गया है लेकिन मैं इसे एक शॉट दूंगा;) आपको कौन सा हिस्सा परेशानी दे रहा है? असल में यदि आप कैनकन के 'load_and_authorize_resource' को कॉल करते हैं तो यह नियंत्रक के नाम को दिए गए सबसे अधिक "लॉजिकल" संसाधन को लोड करने का प्रयास करेगा, जो मजबूत पैरामीटर मणि के संचालन से पहले है। इस मामले में यह उपयोगकर्ता, '@user = user.new (पैराम्स [: उपयोगकर्ता]) बनाने का प्रयास करेगा, लेकिन मजबूत_परमीटर इस तरह बड़े पैमाने पर असाइनमेंट की अनुमति नहीं देंगे। यदि आप @user instance variable को सेट करने के लिए 'first_filter' का उपयोग करते हैं, तो कैनकन इसके बजाय इसका उपयोग करेगा। यदि आपका 'first_filter' strong_parameters का अनुपालन करता है तो उसे कोई त्रुटि नहीं उठानी चाहिए। –
अहह बहुत सराहना की! मैं समझ नहीं रहा था कि कैसे कैनकन "... [अपने] गेटटर विधि का उपयोग कर रहा था ..." लेकिन इससे अब बहुत समझदारी आती है। एक बार फिर धन्यवाद! –