5 এর জন্য, অপরিবর্তিত পদ্ধতি `# এর জন্য # লাইন ডিভাইস_প্রেমিটার_স্যানিটাইজারে ডিভাইস করুন for


95

আমি রেল 5 নিয়ে কাজ করছি

আমি মডেল ব্যবহারকারীতে নতুন ক্ষেত্রের ব্যবহারকারীনাম যুক্ত করেছি।

class Users::RegistrationsController < Devise::RegistrationsController
  before_action :configure_permitted_parameters

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up).push(:username)  
  end
end

নিবন্ধকরণের সময় ত্রুটি প্রদর্শিত হয়: অপরিবর্তিত পদ্ধতি `জন্য '# এর অর্থ কী? কাঁটাচামচ

ট্রেস:

NoMethodError (অপরিবর্তিত পদ্ধতি `জন্য '# এর অর্থ কি? কাঁটাচামচ):

app/controllers/users/registrations_controller.rb:7:in `configure_permitted_parameters'
  Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout
  Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb
  Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (5.0ms)
  Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
  Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (2.9ms)
  Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
  Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.2ms)
  Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (118.1ms)

কে সাহায্য করতে পারে? কিভাবে এই সমস্যার সমাধান?


4
এটি 4.2 রেলের উপরও ঘটে।
সেক্রেট

উত্তর:


175

According to the documentation:

প্যারামিটার সানিটাইজার এপিআই ডিভাইস 4 এর জন্য পরিবর্তিত হয়েছে

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
  end
end

কোনও কারণে এটি কাজ করে তবে আমি যখন
রেলগুলি

@ কে 2 এক্সএল আপনার ডাবল সাফ করবেন? উফ, এর অক্টোবর আপনি কিভাবে এটি ঠিক করেছেন?
তুষারপাত

স্টপ + বসন্ত পুনরায় চালু করুন, মুর্তি
ফিলিস্টিক

4
ধন্যবাদ! যারা তাদের কোড আপডেট করতে চান না তাদের জন্য আপনি কেবল সেই অনুযায়ী আপনার জেমফাইলে সামঞ্জস্য করতে পারেন - gem 'devise', '~> 3'এটি আমার জন্য বাছাই করা।
দারাগ এনরাট

34

আপনি শুধু পরিবর্তন করেন তাহলে .forথেকে .permitএটি হিসাবে ভাল কাজ করে। উদাহরণ স্বরূপ:

devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit({ roles: [] }, :email, :password, :password_confirmation, :username) }

এটি R.২.x এবং রেল ৫.০.x উভয় ক্ষেত্রেই কাজ করে



0

আমি মনে করি আপনি আপনার নিয়ন্ত্রকের কনফিগার_পরিমিত_পরিমিতি পদ্ধতিতে অ্যাকাউন্ট_আপডেটটি মিস করেছেন, আপনাকে ছদ্মবেশী ধরণটি অনুসরণ করতে হবে। ডিভাইসের একটি অ্যাকাউন্ট আপডেট পৃষ্ঠা রয়েছে। আপনি এটিকে ভিউ / ডিভাইস / রেজিস্ট্রেশন / edit.html.erb এ খুঁজে পেতে পারেন এবং আপনার কোডটি সাইন_আপ পৃষ্ঠায়ও কাজ করছে না, এখানে আপনি সাইন_আপ পৃষ্ঠাটি নির্দিষ্ট করেছেন

আপনার ব্যবহারকারীর টেবিলটি আপডেট করতে, আপনি আপনার ব্যবহারকারীদের / সম্পাদনায় কোনও মিনিট আপডেট জমা দিন বা আপনি সাইন_পৃষ্ঠা পৃষ্ঠায় কোনও ব্যবহারকারীর নাম জমা দিচ্ছেন যদি ডাটাবেস ব্যবহারকারী সারণি আপডেট করার জন্য আপনাকে এই নকশাটি অনুসরণ করতে হবে। এমনকি যদি আপনি ব্যবহারকারীর টেবিলে একটি নতুন কলাম যুক্ত করেছেন, আপনাকে এটি কনফিগার_পরিমিত_প্রেমিটার পদ্ধতিতে যুক্ত করতে হবে। আপনার ক্ষেত্রে এটি ব্যবহারকারীর নাম, তবে আপনি অ্যাকাউন্ট_আপডেটও মিস করেছেন। আপনি মূলত বলছেন যে আপনি ব্যবহারকারীর নামটি আপডেট করতে চান বা ডিভাইস প্যাটার্নটি অনুসরণ না করেই ব্যবহারকারীর নাম ক্ষেত্রে স্ট্রিং যুক্ত করতে চান। আপনি ব্যবহারকারীর সারণিতে যে কোনও ক্ষেত্র যুক্ত করুন তার এই ডিভাইস প্যাটার্নটি অনুসরণ করা উচিত। এছাড়াও আপনি এই ব্যবহারকারীর নামটি আপডেট করার জন্য কোন পৃষ্ঠাটিকে অনুমোদিত তা নির্দিষ্ট করে দিতে পারেন। নীচে আমার উদাহরণে, আমি ছদ্মবেশী আপডেট পৃষ্ঠাটি ব্যবহার করছি। সুতরাং আমি যেমন বলেছি, এমনকি আপনি ব্যবহারকারীদের টেবিলে একটি কাস্টম ফিল্ডের নাম যুক্ত করলেও আপনাকে এই ধরণটি অনুসরণ করতে হবে।

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
    devise_parameter_sanitizer.permit(:account_update, keys: [:username])
  end
end

পরবর্তীটি আপনার ব্যবহারকারীর মধ্যে নিশ্চিত করুন

class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable

  validates :username, presence: true
end

-1
class ApplicationController < ActionController::Base

  before_action :configure_permitted_paramters, if: :devise_controller?

  protected
    def configure_permitted_paramters

        devise_parameter_sanitizer.permit(:sign_up, keys: [:fullname])

        devise_parameter_sanitizer.permit(:account_update, keys: [:fullname, 
        :phone_number, :description, :email, :password])

    end

end
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.