কোনও রুটে মেলে না “/ ব্যবহারকারী / সাইন_আউট” রেল 3 তৈরি করে


386

আমি আমার অ্যাপে নকশাকৃত ইনস্টল করেছি এবং আমার application.html.erbফাইলে নিম্নলিখিত প্রয়োগ করেছি :

<div id="user_nav">
    <% if user_signed_in? %>
        Signed in as <%= current_user.email %>. This cannot be cheese?
        <%= link_to 'Sign out', destroy_user_session_path %>
    <% else %>
        <%= link_to 'Register', new_user_registration_path %> or <%= link_to 'Sign in', new_user_session_path %>
    <% end %>
</div>

আমি দৌড়ে গিয়ে rake routesনিশ্চিত করেছি যে সমস্ত রুটই বৈধ।

এছাড়াও, আমার routes.rbফাইলে আমার আছে devise_for :usersএবং root :to => "home#index"

"সাইন আউট" লিঙ্কটি ক্লিক করার সময় আমি নিম্নলিখিত রাউটিং ত্রুটিটি পেয়েছি:

No route matches "/users/sign_out"

কোন ধারণা কি ত্রুটি সৃষ্টি করে?


1
রুটগুলি যুক্ত করার পরে আপনি কি আপনার অ্যাপ্লিকেশনটি পুনরায় চালু করেছেন? রুট পরিবর্তনগুলি কেবল স্টার্টআপে কার্যকর হয়।
থিলো-আলেকজান্ডার জিনকেল

2
হ্যাঁ. কেবল এটি নিরাপদ থাকার জন্য আবার করেছে। এছাড়াও, আমি স্ট্যাকের অন্য কোথাও পড়লাম যে এটি নতুন উদ্ভাবনী রত্নটি ails.০.৩. এর সাথে সামঞ্জস্যপূর্ণ না হওয়ায় এটি আমার সমস্যা হতে পারে তাই আমি আমার কৌতুক রত্নটি ১.৪.২ থেকে পরিবর্তন করার চেষ্টা করেছি gem 'devise', :git => 'git://github.com/plataformatec/devise.git'। যদিও এটি কিছুই করেনি।
vich

জেমফাইলে প্রবেশের পরিবর্তনটি কি কেবল আপনাকে ডিভাইসের একটি নতুন সংস্করণ হিসাবে পাবেন? আপনি কি কম সংস্করণ নম্বর নির্দিষ্ট করার চেষ্টা করেছেন?
লিও কাসারানী

আপনি কি নিজের রুটস.আরবি ফাইল পোস্ট করতে পারেন
ফেলিক্স

1
নীচে জেসির দ্বিতীয় উত্তরটি নিখুঁতভাবে কাজ করেছে।
vich

উত্তর:


568

আমি মনে করি সাইন আউট করার রুটটি একটি DELETEপদ্ধতি। এর অর্থ হল যে আপনার সাইন আউট লিঙ্কটি দেখতে দেখতে এটি দরকার:

<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>

আপনার :method => :deleteঅংশটি অন্তর্ভুক্ত করে না । এছাড়াও, দয়া করে নোট করুন যে এটি কাজ করার জন্য আপনাকে অবশ্যই <%= javascript_include_tag :defaults %>আপনার লেআউট ফাইল ( application.html.erb) এ অন্তর্ভুক্ত করতে হবে ।


3
আমি নিরাপদে বলতে পারি যে আমার কোনও রেলের অ্যাপ্লিকেশনগুলিতে আমার কখনই এটি করা হয়নি। link_to "Sign out", destroy_user_session_pathআমার জন্য সর্বদা যথেষ্ট ভাল ছিল
লিও কাসারানী

8
আমি পরীক্ষাটি করেছি এবং এটি আমার পক্ষে কাজ করে। ভুলে যাবেন না যে জিনিসগুলি একটি সংস্করণ থেকে অন্য সংস্করণে পরিবর্তিত হয় (এটি রেল বা ডিভাইসে থাকুক)। এছাড়াও, লগ আউট করা রাষ্ট্র-পরিবর্তিত আচরণ যা জিইটি পদ্ধতি ব্যবহার করে করা উচিত নয় (আমার বিনীত মতে)।
জেসি ডেডেকার

23
আরও তথ্যের জন্য, ডিভাইসের সর্বশেষ সংস্করণে কেন এটি পরিবর্তন করা হয়েছিল তার যুক্তি এখানে এবং এখানে বর্ণিত হয়েছে
জেসি ডেডেকার

6
আমি এই একই ইস্যুতে দৌড়েছি এবং জেসির পরামর্শ আমার পক্ষে কাজ করেছে। আমি প্রত্যাশা করি যে কেউ এই রেলকাস্টের মধ্য দিয়ে চলছে যারা এই পরিবর্তনের কারণে শেষ পর্যন্ত এখানে শেষ হবে ...
জননিগডম্যান

2
এটি পরীক্ষা করার জন্য আপনি এটি আপনার ওয়েব কনসোলটিতেও টাইপ করতে পারেন $("<a href='/users/sign_out' data-method='delete'>Sign out</a>").appendTo('body');- যদি jQuery পৃষ্ঠাটিতে লোড হয়।
ম্যারাণক্রুজ

133

আমি এই লাইনটি ডিভাইস.আরবিতে পরিবর্তন করেছি:

config.sign_out_via = :delete

প্রতি

config.sign_out_via = :get

এবং এটা আমার জন্য কাজ শুরু।


22
এর আগে যেভাবে এটি করা হয়েছিল তা হ'ল "জিইটি / ব্যবহারকারী / সাইন_আউট" ব্যবহার করে সাইন আউট করা হয়েছিল, তবে তারা এটিকে আরও বিশ্রাম দেওয়ার জন্য এটিকে "মুছে ফেলুন" এ পরিবর্তন করেছে। লেখক ব্যাখ্যা করেছেন যে জিইটি সার্ভারে লগ আউট করার মতো পরিবর্তন করা উচিত নয়।
জোনাথন অ্যালার্ড

2
এটি আমার জন্য কাজ করেছে। যদিও আমি প্রশংসা করি এটি সর্বোত্তম অনুশীলন নয়, অন্য উত্তরগুলি ব্যর্থ হয়েছে। আমি দেখতে পাচ্ছি না কেন !!
হালকা Fuzz

8
আপনি একাধিক পদ্ধতি সমর্থন করতে চান তবে একটি অ্যারে ব্যবহার করাও সম্ভব। উদাহরণস্বরূপ: config.sign_out_via = [ :post, :delete ]বা devise_for :users, :sign_out_via => [ :post, :delete ], নকশাকরণ / রেল / রুটস.আরবি বর্ণিত হিসাবে ।
হোসাম অলি

2
আমি সাইন আউট করার জন্য জিইটি অনুরোধটি ব্যবহার করব না কারণ এটি ব্যবহারকারীকে এক্সএসআরএফ আক্রমণে খোলে। (হ্যাকার src = " foo.com/users/sign_out " দিয়ে একটি চিত্র ট্যাগ সহ একটি ওয়েবসাইট তৈরি করে , ব্যবহারকারী এটি দেখতে যান এবং লগ আউট হন)।
রায়ান দোহার্টি

1
@ রায়ানডোহার্টি আইডি আমি ভুল করি না, এক্সএসআরএফ এখনও সম্ভব (আক্রমণকারীকে লক্ষ্য url এ অ্যাকশন = "ডিলিট" সহ একটি ফর্ম ব্যবহার করতে হবে, তারপরে পৃষ্ঠা লোডে এটি স্বয়ংক্রিয়ভাবে জমা দিতে হবে)।
মল নিসন

60

আপনি সম্ভবত jquery_ujs জাভাস্ক্রিপ্ট ফাইল অন্তর্ভুক্ত করেন নি। আপনি jquery-ujs এর সর্বশেষ সংস্করণটি ব্যবহার করছেন তা নিশ্চিত করুন: https://github.com/rails/jquery-ujs এবং সর্বশেষ ফাইলগুলি উপলভ্য:

rails generate jquery:install

আপনার আর কোনও Rails.js ফাইল থাকা উচিত নয় । যদি আপনি এটি করেন তবে আপনি সম্ভবত পুরানো। কনফিগারেশন / অ্যাপ্লিকেশন.আরবিতে এই ফাইলটি ডিফল্ট লোড হয়েছে কিনা তা নিশ্চিত করুন

config.action_view.javascript_expansions[:defaults] = %w(jquery.min jquery_ujs)

(আবার, আপনার এখানে রেলস.জেএস ফাইল থাকা উচিত নয় )। অবশেষে, ডিভাইস উইকিতে (ডাবলড স্টাইল) নথি হিসাবে লিঙ্কটি যুক্ত করুন :

= link_to('Logout', destroy_user_session_path, :method => 'delete')

এবং সবকিছু ঠিক হয়ে যাবে।


8
আমার লিঙ্ক_তে: পদ্ধতি => 'মুছুন' ছিল, সমস্যাটি jquery_Us অন্তর্ভুক্ত ছিল না, এই সমাধানটি আমার সমস্যার সমাধান করে। আপনার রত্নখচিত্রে রত্নকে 'জকিউরি-রেলস' রাখার কথা মনে রাখবেন।
রব বাজিনেট

2
ধন্যবাদ এটি আমার জন্য কাজ করেছে। ডিফল্ট ব্যবহারের পরিবর্তে আপনি এটিও ব্যবহার করতে পারেনjavascript_include_tag "jquery_ujs"
বিনিচোলস

ভাল ধরা, ধন্যবাদ! আমি অ্যাসিঙ্ক্রোনালি ফাইল লোড করতে প্রয়োজনীয়.js ব্যবহার করছি এবং jquery_ujs প্রয়োজন ভুলে গিয়েছি।
ড্যান ফাইরাইজল

আমি ধরে নিয়েছি "ইউ" মানে সঙ্কুচিত এবং এই লাইনটি সরিয়ে নিয়েছে application.js। খারাপ ধারণা, আমার ধারণা। ধন্যবাদ।
জেফ

টুইটার বুটস্ট্র্যাপটি কম থেকে স্যাসে পরিবর্তন করার পরে এই সমস্যাটি (আমার 100 তম ডিভাইস ভিত্তিক অ্যাপ্লিকেশনটিতে) ক্রপ হয়ে গেছে এবং আমি আমার অ্যাপ্লিকেশন.জেএসএসে // = প্রয়োজনীয় জ্যাকুইরি_জগুলি যুক্ত করতে ভুলে গেছি।
জো

31

লগআউট লিঙ্কটিকে একটি DELETE RESTful কল করার ক্ষমতাটির জন্য data-method = "delete"রেল কোড ব্যবহার করে এইচটিএমএল বৈশিষ্ট্য প্রয়োজন = link_to('Logout', destroy_user_session_path, :method => :delete)

তবে, যদি আপনি মণিটি jquery-ujsইনস্টল না করেন বা ফলস্বরূপ জাভাস্ক্রিপ্টটিকে আপনার অ্যাপ্লিকেশনে html এর মাধ্যমে কল না করেন = javascript_include_tag "application"তবে প্রতিক্রিয়াটি জিইটি অনুরোধ হিসাবে প্রেরণ করা হবে এবং রুটটি ব্যর্থ হবে।

আপনি যদি ব্যবহার করতে না চান jquery-ujsবা এটিকে কাজ করার কোনও উপায় খুঁজে না পান তবে আপনার কাছে কয়েকটি বিকল্প রয়েছে :

  1. পরিবর্তন config.sign_out_viaসমান :getমধ্যে devise.rb(প্রস্তাবিত নয়, মুছুন যেহেতু উপযুক্ত RESTful ক্যোয়ারী হয়)
  2. বা পরিবর্তন link_toকরতে = button_to('Logout', destroy_user_session_path, :method => :delete)button_toরিয়েলগুলি সহ সঠিক ডিলিট কল করার জন্য ভারী উত্তোলন করবে। আপনি যদি চান তবে একটি লিঙ্কের মতো দেখতে বোতামটি স্টাইল করতে পারেন।

লিঙ্ক_ থেকে বোতাম_এর পরিবর্তন আমার পক্ষে কাজ করেছে, তবে কেন আমি সত্যি বুঝতে পারি না? এইচটিএমএল / সিএসএস বাদে ঠিক কী পরিবর্তন হয়েছিল?
স্পাইরোস ম্যান্ডেকিস

1
এটি রেলের 'ম্যাজিক' এর সাথে করতে হবে যা বোতাম_টো এবং লিংক_ টোর মতো ফাংশন থেকে স্বয়ংক্রিয়ভাবে এইচটিএমএল উত্পাদন করে। এটি ঠিক তাই ঘটে যে বোতাম_এর জন্য রেল যাদুটি যথাযথ RESTful DELETE কল এবং লিঙ্ক_তে না তা নির্দিষ্ট করে। যদি আমার অনুমান করতে হয়, আমি কারণটি বলব যে এইচটিএমএল বোতামের উপাদানগুলি কোনও নিয়মিত লিঙ্কগুলি পারে না এমন সময়ে একটি ডিলি কল (বা ক্রিয়া নির্দিষ্ট করে দেওয়া কোনও গোপন ক্ষেত্রের সাথে বান্ডিল করতে পারে) পরিচালনা করতে পারে।
নাথান

এর জন্য ধন্যবাদ. আমি ম্যানুয়ালি jquery হ্যান্ডেল করার জন্য আমার অ্যাপটি সেটআপ করি, তাই আমার কাছে jquery-ujs ছিল না। বোভার বা বান্ডিলারের সাথে ইনস্টল করা এবং সম্পদ পাইপলাইনের জন্য উপযুক্ত লাইন সহ সমস্যা সমাধান করে।
jrhorn424

1
এটি আমার কাছে সবচেয়ে নিরাপদ এবং বহনযোগ্য সমাধান বলে মনে হচ্ছে।

প্রায় button_to, রেল formপুরো ক্রিয়াটির জন্য একটি উত্পন্ন করে । এ কারণেই :deleteপদ্ধতিটি ব্যবহার করা সম্ভব এবং এর সাথে button_toনয় link_to, কেবল উত্পন্ন এইচটিএমএল দেখুন।
ফার্নান্দো ফ্যাব্রেতি

25

# ধ্বংস এবং এর সাথে লিঙ্ক করার জন্য একটি নতুন রুট যুক্ত করার চেষ্টা করুন। উদাহরণ:

routes.rb
devise_for :users do
  get 'logout' => 'devise/sessions#destroy'
end

দেখুন:

<%= link_to "Logout", logout_path %>

এমমিকেলের মতো একই ত্রুটি পাওয়া। এই উপরের পরীক্ষাটি আমার পক্ষে কাজ করে।
rtfminc

1
আমারও এমমিকেলের মতো একই ত্রুটি ছিল। উপরের সমাধানটি কাজ করবে তবে এটি ঠিক করার কথাটি এটি নয়। ডিভাইসে ডিফল্ট রুটগুলি ইতিমধ্যে একটি মোছার পদ্ধতি হিসাবে সাইন আউট রুট অন্তর্ভুক্ত করে। সাধারণত আপনার নিজেরাই ডিফল্ট রুটগুলি পরিবর্তন করার দরকার নেই। link_toঅন্য উত্তরে বর্ণিত হিসাবে আপনি কেবলমাত্র কলটিতে পৃথক প্যারামিটার যুক্ত করে এটি ঠিক করতে পারেন ।
জেসি ডেডেকার

আপনাকে রুট.আরবি ফাইলে কোনও রুট যুক্ত করতে হবে না, ডিভাইস আপনাকে ডিভাইস.আরবিতে পদ্ধতিটি পরিবর্তন করতে দেয় যা / সীমাবদ্ধ / প্রারম্ভিক / ডিরেক্টরিতে রয়েছে।
ট্র্যাভিস পেসেট্টো

6
জিইটি হিসাবে কখনও লগআউট পাথ না।
জাগিরা

@ জগিরা কেন? কেন ডিলেট এবং জিইটি উভয়ই না?
hrdwdmrbl


13

রেল ৩.১.০ এর সাথে আমারও একই সমস্যা ছিল এবং আমি নিম্নলিখিত লাইনগুলিতে ফাইল যুক্ত করে সমাধান করেছি:

app/assets/javascripts/application.js
//= require_tree
//= require jquery
//= require jquery_ujs

বোর ব্যবহার করে ব্যবহার করার জন্য // = jquery-ujs প্রয়োজন।
মন্টেইরোব্রেনা

10

একটি ব্যতিক্রম ছাড়া, জেসির উত্তর আমার পক্ষে কাজ করেছে:

<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>

পরিবর্তন:

:delete

... প্রতি:

'delete'

সুতরাং যে কোডটি আমার পক্ষে কাজ করেছে তা হ'ল:

<%= link_to "Sign out", destroy_user_session_path, :method => 'delete' %>

এই কোড স্নিপেট পোস্ট করার জন্য আপনাকে ধন্যবাদ, সাইন_আউট এখন আমার জন্য কাজ করে।
বুক

9

ইতিমধ্যে প্রশ্নের অনেক উত্তর। আমার জন্য সমস্যা ছিল দুই গুণ:

  1. যখন আমি আমার রুটগুলি প্রসারিত করি:

    devise_for :users do 
       get '/users/sign_out' => 'devise/sessions#destroy'
    end
  2. আমি সতর্ক হচ্ছিলাম যে এটি অবহেলিত তাই আমি এটিকে এর সাথে প্রতিস্থাপন করেছি:

    devise_scope :users do
       get '/users/sign_out' => 'devise/sessions#destroy'
    end
  3. আমি ভেবেছিলাম আমার jQuery সরিয়ে ফেলব। খারাপ পছন্দ. ডিভাইস jQuery ব্যবহার করে "জাল" মুছে ফেলার অনুরোধটি ব্যবহার করে এটি জিইটি হিসাবে প্রেরণ করে। অতএব আপনার প্রয়োজন:

    //= require jquery
    //= require jquery_ujs
  4. এবং অবশ্যই আগে লিখিত হিসাবে একই লিঙ্ক:

    <%= link_to "Sign out", destroy_user_session_path, :method => :delete %>

আপনি কি তৃতীয় দফাটি ব্যাখ্যা করতে পারেন..আমি এর শিকার হয়েছিলাম এবং আমি এটি আরও বুঝতে চাই
রাহুল ডেস

1
নিশ্চয়ই. আপনার ওয়েবসাইট সত্যিই কোনও মুছে ফেলার অনুরোধ পাঠাচ্ছে না। বেশ স্পষ্টতই এটি কেবল জিইটি এবং পোস্ট ব্যবহার করবে। কারণ রেল সম্প্রদায়টিতে এটি সম্মত হয়েছে যে (ভাল কারণে) আমরা মুছে ফেলার অনুরোধ জমা দেওয়ার সময় রেকর্ডগুলি মুছতে চাই আমাদের একটু কৌশল ব্যবহার করা দরকার use আপনার ইআরবিতে আপনি যখন পদ্ধতিটি নির্দিষ্ট করেন:: রেলগুলি মুছুন এটি HTML5 ট্যাগে রূপান্তরিত করবে: ডেটা-পদ্ধতি = "মুছুন" এবং এটি জিইটি হিসাবে জমা দিন। এখন, এখানেই jQuery-ujs এবং jQuery লাথি মেরে app আপনি অ্যাপ্লিকেশনটিকে এটি সনাক্ত করতে মঞ্জুরি দেয় যা আপনি করছেন। যাতে আপনার অনুরোধটি নিয়ন্ত্রণকারী ক্রিয়াটির সাথে মিলে যায় be
লুকাসজ মুজাইকা

এই রত্নগুলি ছাড়া এটি কাজ করবে না। অবশ্যই, আপনি ছদ্মবেশের সেটিংস পরিবর্তন করতে পারেন (নকশাকার সূচনাতে) এবং এটি মুছে ফেলার পরিবর্তে জিইটি ব্যবহার করতে বলতে পারেন।
লুকাসজ মুজাইকা

7

যোগ করুন

  <%= csrf_meta_tag %>  and 
  <%= javascript_include_tag :defaults %>  to layouts

এই লিঙ্ক_ টোগো ব্যবহার করুন

 link_to 'Sign out', destroy_user_session_path, :method => :delete

  or

 link_to 'Sign out', '/users/sign_out', :method => :delete

রুটে যোগ করুন:

  devise_for :users do
    get '/users/sign_out' => 'devise/sessions#destroy'
  end

7

অন্য বিকল্পটি হ'ল লগআউটটি একটি ডিলেট পরিবর্তে GET হিসাবে কনফিগার করা যায়, আপনি নিম্নলিখিত লাইনটি যুক্ত করে তা করতে পারেন /config/initializers/devise.rb

config.sign_out_via = :get

তবে স্টিভ ক্লাবনিক তার ব্লগে যেমন লিখেছিলেন (http://blog.steveklabnik.com/2011/12/11/devise-actioncontroller-routingerror-no-route-matches-get-slash-users-slash-sign-out.html ) এই পদ্ধতির শব্দার্থকতার কারণে মোছার ব্যবহার করার চেষ্টা করুন।


কেবলমাত্র এই উত্তরটি আমার জন্য
ডিভাইস

সার্ভারটি পুনরায় চালু করতে ভুলবেন না :)
জ্যাকমিন

6

আপনি যদি রেল ৩.১ ব্যবহার করছেন তবে আপনার অ্যাপ্লিকেশন। Html.erb সাইন আউট দেখে মনে হচ্ছে তা নিশ্চিত করুন:

<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>

এবং যে আপনার জাভাস্ক্রিপ্ট লাইন অন্তর্ভুক্ত অন্তর্ভুক্ত নিম্নলিখিত দেখতে

<%= javascript_include_tag 'application' %>

আমার অনুমান যে কিছু রত্নগুলি ডিফল্ট.জেএস অবস্থানের নতুন কাঠামোটিকে ওভাররাইট করে।


ধন্যবাদ! এটা আমাকে পাগল করে দিচ্ছিল!
ডোরিয়ান

5

গিথুব এ উত্স কোড সহ এটি পরীক্ষা করে দেখুন:

https://github.com/plataformatec/devise/commit/adb127bb3e3b334cba903db2c21710e8c41c2b40#lib/generators/templates/devise.rb (তারিখ: জুন 27, 2011)

  • # কোনও উত্স সাইন আউট করতে ব্যবহৃত ডিফল্ট এইচটিটিপি পদ্ধতি। ডিফল্ট হ'ল: পান। 188
  • # config.sign_out_via =: 187 পান 18
  • # কোনও উত্স সাইন আউট করতে ব্যবহৃত ডিফল্ট এইচটিটিপি পদ্ধতি। ডিফল্ট হ'ল: মুছুন। 188
  • config.sign_out_via =: মুছুন

5

ভাল, ছেলেরা আমার জন্য এটি কেবল: পদ্ধতি =>: মুছুন remove

<%= link_to('Sign out', destroy_user_session_path) %>

5

এর অর্থ আপনি jquery-Rails রত্ন ইনস্টল করার পরে আপনি jquery ফাইলগুলি তৈরি করেন নি। সুতরাং প্রথমে আপনার এটি তৈরি করা দরকার।

rails generate devise:install

প্রথম বিকল্প:

এর অর্থ হয় আপনাকে নিম্নলিখিত লাইনটি পরিবর্তন করতে হবে /config/initializers/devise.rb

config.sign_out_via =: config.sign_out_via =: get এ মুছুন

দ্বিতীয় বিকল্প:

আপনি শুধুমাত্র এই লাইন পরিবর্তন <%= link_to "Sign out", destroy_user_session_path %>করতে<%= link_to "Sign out", destroy_user_session_path, :method => :delete %> দৃশ্য ফাইলে।

সাধারণত :method => :deleteডিফল্ট হিসাবে লেখা হয় না।


5

এটি কিছুটা পুরাতন হওয়া সত্ত্বেও আমি এটিতে যুক্ত করতে চাই।

"সাইন_আউট" লিঙ্কটি কার্যকর হয়নি: থাকা সত্ত্বেও: পদ্ধতি =>: মুছুন।

<%= javascript_include_tag :defaults %>অন্তর্ভুক্ত থাকা আবশ্যক মন্তব্যটি আমাকে স্মরণ করিয়ে দিয়েছিল আমি সম্প্রতি JQuery জাভা স্ক্রিপ্ট যুক্ত করেছি এবং সহজ ব্যবহার করেছি<script src=""/> সেগুলি অন্তর্ভুক্ত করার জন্য ট্যাগ করেছি।

আমি যখন এগুলি পূর্বের ডিফল্টের পরে থেকে সরিয়ে নিয়েছি তখন সাইন_আউট আবার কাজ শুরু করে।

আশা করি এটি কাউকে সাহায্য করবে।


5

বেশিরভাগ উত্তর আংশিক। আমি এই সমস্যাটি বহুবার আঘাত করেছি। দুটি বিষয় সম্বোধন করা দরকার:

<%= link_to(t('logout'), destroy_user_session_path, :method => :delete) %>

মুছে ফেলা পদ্ধতি নির্দিষ্ট করা প্রয়োজন

তারপরে জ্যাকারি ব্যবহারের পরিকল্পনা করুন, যাতে আপনার সেগুলি লোড করা দরকার

   <%= javascript_include_tag "myDirectiveJSfile" %> 

এবং নিশ্চিত করে নিন যে উভয় jquery এবং jquery-ujs আপনার myDirectiveJSfile.js এ নির্দিষ্ট করা আছে

//= require jquery
//= require jquery_ujs

5

আপনার অ্যাপ্লিকেশন.জেএস-এ নিম্নলিখিত লাইনটি অন্তর্ভুক্ত করতে ভুলবেন না (রেল 3)

//= require_self
//= require jquery
//= require jquery_ujs

jquery_ujsআমার রেল অ্যাপ্লিকেশন অন্তর্ভুক্ত এবং এটি এখন কাজ করে।


4

আপনি যদি ছদ্মবেশযুক্ত এইচটিটিপিএস ব্যবহার করে থাকেন তবে আপনার সাইন-আউট লিঙ্কটি সুরক্ষিত সংস্করণে না থাকলে তা ভেঙে যাবে। পিছনের প্রান্তে, এটি সুরক্ষিত সংস্করণে পুনর্নির্দেশ করে। এই পুনর্নির্দেশটি একটি জিইটি, যা সমস্যার কারণ।

আপনার লিঙ্কটি এইচটিটিপিএস ব্যবহার করেছে তা নিশ্চিত করুন। আপনি এটি protocol: "https"আপনার ইউআরএল সহায়কের সাহায্যে জোর করে নিতে পারেন (নিশ্চিত করুন যে আপনি ইউআরএল হেল্পার ব্যবহার করেছেন এবং পাথ সহায়ক নয়)।

<%= link_to "Sign out", destroy_user_session_url(protocol: "https"), method: :delete %>


3

সমস্যাটি 3.1 রেল দিয়ে শুরু হবে ... /app/assets/javascript/কেবল অ্যাপ্লিকেশন.জেএস সন্ধান করুন।

যদি ফাইলটি বিদ্যমান না থাকে তবে সেই নামটি দিয়ে একটি ফাইল তৈরি করুন আমি জানি না কেন আমার ফাইলটি অদৃশ্য হয়ে যায় বা কখনই তৈরি হয় না "rails new app"...

এই ফাইলটি উদাহরণস্বরূপ jquery...


3

প্রচুর সমাধান রয়েছে। তবে বেশিরভাগই এটি ব্যবহার করুন,

<%= link_to 'Sign out', destroy_user_session_path, method: :delete %>

বা সঠিক sign_out পদ্ধতিতে devise.rb কনফিগার করুন

ইন ডেভিস.আরবি

config.sign_out_via = :delete ( or  :get which u like to use.) 

3

আপনার পথের জন্য ব্যবহার :getএবং :deleteপদ্ধতি:

devise_scope :user do
  match '/users/sign_out' => 'devise/sessions#destroy', :as => :destroy_user_session, via: [:get, :delete]
end

দ্রষ্টব্য: অবশ্যই শয়তান_র জন্য: ব্যবহারকারীরা এটি থেকে পৃথকভাবে ঘোষিত হয়েছে। উত্তরটি ডিপোল_মোমেন্ট থেকে দেখুন।
টেলরড ওয়েব সাইটগুলি

2

আপনার রুটে.আরবি:

 devise_for :users do
    get '/sign_out' => 'devise/sessions#destroy'
    get '/log_in' => 'devise/sessions#new'
    get '/log_out' => 'devise/sessions#destroy'
    get '/sign_up' => 'devise/registrations#new'
    get '/edit_profile' => 'devise/registrations#edit'
 end

এবং আপনার প্রয়োগে html.erb:

<%if user_signed_in?%>
          <li><%= link_to "Sign_out", sign_out_path %></li>
<% end %>

1
সিনট্যাক্সটি এখন: ডিভাইস_ফোর্স: ব্যবহারকারীগণ অবশ্যই গ্রাউন্ডটি অবশ্যই ডিভাইস_স্কোপে রাখতে হবে: ব্যবহারকারী নোট: একক শব্দ: ব্যবহারকারী ডিভাইস_স্কোপের জন্য
ওয়েব সাইটগুলি

2

এটি আমিই করেছি (রেল 3.0 এবং ডিভাইস 1.4.2 সহ):

  1. আপনার পৃষ্ঠাটি Rails.js বোঝা হয়েছে তা নিশ্চিত করুন
  2. এই প্যারামটি ব্যবহার করুন: 'ডেটা-পদ্ধতি' => 'মুছুন'
  3. এই পরম যুক্ত করার জন্য ভাল ধারণা:: rel => 'নফলো'

1

আপনার রুটস.আরবির একটি "ডিভাইস_ফোর্স: ব্যবহারকারী" এর আগে "রিসোর্স: ব্যবহারকারী" রয়েছে কিনা তা দেখুন সেগুলি অদলবদল করার চেষ্টা করুন:

  1. ওয়ার্কস

    • devise_for: ব্যবহারকারীগণ
    • সংস্থানসমূহ: ব্যবহারকারীগণ
  2. ব্যর্থ

    • সংস্থানসমূহ: ব্যবহারকারীগণ
    • devise_for: ব্যবহারকারীগণ

1

':method => :delete'পৃষ্ঠায় রয়েছে' data-method="delete"'যাতে আপনার পৃষ্ঠা jquery_ujs.js থাকতে হবে, এটা পদ্ধতি মুছে ফেলতে পারবেন না পদ্ধতি পেতে সাথে লিঙ্ক পাঠাবে


1

আমি জানি এটি রেল 3 এর উপর ভিত্তি করে একটি পুরানো প্রশ্ন তবে আমি কেবল এটি ছড়িয়ে দিয়েছিলাম এবং এটি 4.0.4.4 রেলের মধ্যে সমাধান করেছি। সুতরাং ভেবেছিলাম যে আমি এই সংস্করণটির সাথে যে কোনও সমস্যাটির মুখোমুখি হয়েছি তার জন্য আমি কীভাবে এটি স্থির করব। আপনার মাইলেজ পরিবর্তিত হতে পারে তবে আমার পক্ষে যা কাজ করেছে তা এখানে।

প্রথমে নিশ্চিত হয়ে নিন যে আপনি রত্নগুলি ইনস্টল করেছেন এবং বান্ডিল ইনস্টলটি চালান।

gem 'jquery-rails'

gem 'turbolinks'

gem 'jquery-turbolinks'

অ্যাপ্লিকেশন.জেএস এ নীচের মতো সব কিছুর প্রয়োজন আছে তা পরীক্ষা করে দেখুন।

সাবধান থাকুন যদি এই গেটচা : এটি //= require jquery.turbolinksএবং না//= require jquery-turbolinks

//= require jquery
//= require jquery_ujs
//= require jquery.turbolinks
//= require turbolinks
//= require_tree .

এরপরে, অ্যাপ্লিকেশন html.erb এর শিরোনামে উপযুক্ত লিঙ্কগুলি যুক্ত করুন।

<%= javascript_include_tag  "application", "data-turbolinks-track" => true %>
<%= javascript_include_tag :defaults %>

মুছে ফেলা পদ্ধতিটি কীভাবে প্রয়োগ করা যায় সে সম্পর্কে অনেক বৈচিত্র রয়েছে বলে আমি মনে করি যা আপনি ব্যবহার করছেন সেই রেলের সংস্করণের উপর নির্ভর করে। এটি deleteআমার ব্যবহৃত সিনট্যাক্স।

<p><%= link_to "Sign Out", destroy_user_session_path, :method => 'delete' %></p>

আশা করি যে এই হতাশার গর্ত থেকে কাউকে খুঁজে বের করতে সহায়তা করে!


0

সাধারণভাবে যখন আপনি "কোনও রুটের সাথে মেলে না" পেয়েছেন তবে আপনি মনে করেন যে সেই রুটটি আপনার সংজ্ঞায়িত করেছেন তবে সেই রুটের জন্য http ক্রিয়া / অনুরোধ পদ্ধতিটি (এটি পেয়ে গেলে, পোস্ট করুন, মুছুন ইত্যাদি) ডাবল পরীক্ষা করে দেখুন

আপনি যদি রেক রুটগুলি চালান তবে আপনি প্রত্যাশিত পদ্ধতিটি দেখতে পাবেন এবং আপনি এটি অনুরোধ লগের সাথে তুলনা করতে পারেন।

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