Разработать рельсы 3.1.3 Нет подходящих маршрутов [УДАЛИТЬ] "/ users / sign_out" - PullRequest
2 голосов
/ 30 декабря 2011

У меня проблема с использованием devise 1.1.9 и rails 3.1.3 со ссылкой для выхода.

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

после длительного изучения этого вопроса единственными ответами, которые я мог, были все для людей, пропустивших: method =>: delete в ссылке выхода, как вы можете видеть, у меня есть этот метод в моей ссылке. Я тоже пробовал

<%= link_to('sign out', destroy_user_session_path, :method => :delete) %>

рейковые маршруты

  new_user_session GET    /users/sign_in(.:format)                          {:action=>"new", :controller=>"devise/sessions"}
      user_session POST   /users/sign_in(.:format)                          {:action=>"create", :controller=>"devise/sessions"}
  destroy_user_session GET    /users/sign_out(.:format)                         {:action=>"destroy", :controller=>"devise/sessions"}
      user_password POST   /users/password(.:format)                         {:action=>"create", :controller=>"devise/passwords"}
 new_user_password GET    /users/password/new(.:format)                     {:action=>"new", :controller=>"devise/passwords"}
edit_user_password GET    /users/password/edit(.:format)                    {:action=>"edit", :controller=>"devise/passwords"}
                   PUT    /users/password(.:format)                         {:action=>"update", :controller=>"devise/passwords"}
 user_registration POST   /users(.:format)                                  {:action=>"create", :controller=>"devise/registrations"}
 new_user_registration GET    /users/sign_up(.:format)                          {:action=>"new", :controller=>"devise/registrations"}
edit_user_registration GET    /users/edit(.:format)                             {:action=>"edit", :controller=>"devise/registrations"}
                   PUT    /users(.:format)                                  {:action=>"update", :controller=>"devise/registrations"}
                   DELETE /users(.:format)                                  {:action=>"destroy", :controller=>"devise/registrations"}
  article_comments GET    /articles/:article_id/comments(.:format)          {:action=>"index", :controller=>"comments"}
                   POST   /articles/:article_id/comments(.:format)          {:action=>"create", :controller=>"comments"}
   new_article_comment GET    /articles/:article_id/comments/new(.:format)      {:action=>"new", :controller=>"comments"}
  edit_article_comment GET    /articles/:article_id/comments/:id/edit(.:format) {:action=>"edit", :controller=>"comments"}
   article_comment GET    /articles/:article_id/comments/:id(.:format)      {:action=>"show", :controller=>"comments"}
                   PUT    /articles/:article_id/comments/:id(.:format)      {:action=>"update", :controller=>"comments"}
                   DELETE /articles/:article_id/comments/:id(.:format)      {:action=>"destroy", :controller=>"comments"}
          articles GET    /articles(.:format)                               {:action=>"index", :controller=>"articles"}
                   POST   /articles(.:format)                               {:action=>"create", :controller=>"articles"}
       new_article GET    /articles/new(.:format)                           {:action=>"new", :controller=>"articles"}
      edit_article GET    /articles/:id/edit(.:format)                      {:action=>"edit", :controller=>"articles"}
           article GET    /articles/:id(.:format)                           {:action=>"show", :controller=>"articles"}
                   PUT    /articles/:id(.:format)                           {:action=>"update", :controller=>"articles"}
                   DELETE /articles/:id(.:format)                           {:action=>"destroy", :controller=>"articles"}
              root        /                                                 {:action=>"index", :controller=>"articles"}

любая помощь очень ценится

Обновление:

Ответ ниже предложил изменить config.sign_out_via =: получить to: удалить, но у меня нет этой строки в следующем файле devise.rb

# Use this hook to configure devise mailer, warden hooks and so forth. The first
# four configuration values can also be set straight in your models.
Devise.setup do |config|
# ==> Mailer Configuration
# Configure the e-mail address which will be shown in DeviseMailer.
config.mailer_sender = "please-change-me@config-initializers-devise.com"

# Configure the class responsible to send e-mails.
# config.mailer = "Devise::Mailer"

# ==> ORM configuration
# Load and configure the ORM. Supports :active_record (default) and
# :mongoid (bson_ext recommended) by default. Other ORMs may be
# available as additional gems.
require 'devise/orm/active_record'

# ==> Configuration for any authentication mechanism
# Configure which keys are used when authenticating an user. By default is
# just :email. You can configure it to use [:username, :subdomain], so for
# authenticating an user, both parameters are required. Remember that those
# parameters are used only when authenticating and not when retrieving from
# session. If you need permissions, you should implement that in a before filter.
 config.authentication_keys = [ :email ]

# Tell if authentication through request.params is enabled. True by default.
 config.params_authenticatable = true

# Tell if authentication through HTTP Basic Auth is enabled. False by default.
# config.http_authenticatable = false

# Set this to true to use Basic Auth for AJAX requests.  True by default.
# config.http_authenticatable_on_xhr = true

# The realm used in Http Basic Authentication
# config.http_authentication_realm = "Application"

# ==> Configuration for :database_authenticatable
# For bcrypt, this is the cost for hashing the password and defaults to 10. If
# using other encryptors, it sets how many times you want the password re-encrypted.
config.stretches = 10

# Define which will be the encryption algorithm. Devise also supports encryptors
# from others authentication tools as :clearance_sha1, :authlogic_sha512 (then
# you should set stretches above to 20 for default behavior) and :restful_authentication_sha1
# (then you should set stretches to 10, and copy REST_AUTH_SITE_KEY to pepper)
config.encryptor = :bcrypt

# Setup a pepper to generate the encrypted password.
config.pepper =   "hidden"

# ==> Configuration for :confirmable
# The time you want to give your user to confirm his account. During this time
# he will be able to access your application without confirming. Default is nil.
# When confirm_within is zero, the user won't be able to sign in without confirming. 
# You can use this to let your user access some features of your application 
# without confirming the account, but blocking it after a certain period 
# (ie 2 days). 
# config.confirm_within = 2.days

# ==> Configuration for :rememberable
# The time the user will be remembered without asking for credentials again.
# config.remember_for = 2.weeks

# If true, a valid remember token can be re-used between multiple browsers.
# config.remember_across_browsers = true

# If true, extends the user's remember period when remembered via cookie.
# config.extend_remember_period = false

# ==> Configuration for :validatable
# Range for password length
 config.password_length = 6..20

# Regex to use to validate the email address
 config.email_regexp = /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i

# ==> Configuration for :timeoutable
# The time you want to timeout the user session without activity. After this
# time the user will be asked for credentials again.
# config.timeout_in = 10.minutes

# ==> Configuration for :lockable
# Defines which strategy will be used to lock an account.
# :failed_attempts = Locks an account after a number of failed attempts to sign in.
# :none            = No lock strategy. You should handle locking by yourself.
# config.lock_strategy = :failed_attempts

# Defines which strategy will be used to unlock an account.
# :email = Sends an unlock link to the user email
# :time  = Re-enables login after a certain amount of time (see :unlock_in below)
# :both  = Enables both strategies
# :none  = No unlock strategy. You should handle unlocking by yourself.
# config.unlock_strategy = :both

# Number of authentication tries before locking an account if lock_strategy
# is failed attempts.
# config.maximum_attempts = 20

# Time interval to unlock the account if :time is enabled as unlock_strategy.
# config.unlock_in = 1.hour

# ==> Configuration for :token_authenticatable
# Defines name of the authentication token params key
# config.token_authentication_key = :auth_token

# ==> Scopes configuration
# Turn scoped views on. Before rendering "sessions/new", it will first check for
# "users/sessions/new". It's turned off by default because it's slower if you
# are using only default views.
 config.scoped_views = true

# Configure the default scope given to Warden. By default it's the first
# devise role declared in your routes.
# config.default_scope = :user

# Configure sign_out behavior. 
# By default sign_out is scoped (i.e. /users/sign_out affects only :user scope).
# In case of sign_out_all_scopes set to true any logout action will sign out all active scopes.
 config.sign_out_all_scopes = true

# ==> Navigation configuration
# Lists the formats that should be treated as navigational. Formats like
# :html, should redirect to the sign in page when the user does not have
# access, but formats like :xml or :json, should return 401.
# If you have any extra navigational formats, like :iphone or :mobile, you
# should add them to the navigational formats lists. Default is [:html]
# config.navigational_formats = [:html, :iphone]


# ==> Warden configuration
# If you want to use other strategies, that are not (yet) supported by Devise,
# you can configure them inside the config.warden block. The example below
# allows you to setup OAuth, using http://github.com/roman/warden_oauth
#
# config.warden do |manager|
#   manager.oauth(:twitter) do |twitter|
#     twitter.consumer_secret = <YOUR CONSUMER SECRET>
#     twitter.consumer_key  = <YOUR CONSUMER KEY>
#     twitter.options :site => 'http://twitter.com'
#   end
#   manager.default_strategies(:scope => :user).unshift :twitter_oauth
# end
end

и добавление строки

config.sign_out_via = :get

заставляет сервер не запускаться еще раз спасибо

Ответы [ 3 ]

3 голосов
/ 30 декабря 2011

На маршруте users/sign_out в ваших выходных маршрутах есть запрос GET, а не DELETE.

Я подозреваю, что у вас есть что-то подобное в вашем config/initializers/devise.rb:

config.sign_out_via = :get

По умолчанию эта опция установлена ​​на :delete.

0 голосов
/ 26 декабря 2013
> rails generate devise:views
  • Папка просмотров моего устройства с этим генератором: http://j.mp/1cr6j6s
  • Маршрутизация на route.rb с devise_for :users
0 голосов
/ 26 декабря 2013

Вы не должны изменять свой config.sign_out_via =: get to: delete в файле devise.rb по нескольким причинам.

1) Это изменит действие удаления на Get вместо Delete для 2

2) Каждый тест, который вы пишете здесь, будет отображаться как удаление с запросом Get. Это означает, что результат действия неверен.

3) У вас правильный код, и это именно то, что у меня есть.

Как начинающий, позвольте мне вкратце понять, в чем заключается проблема. Когда я столкнулся с этой ошибкой, я подтвердил: "Вы уверены?" в конце эрб. Я изменил положение внутри тега erb, и это сработало. Я думаю, что это может быть связано с маршрутами, не регистрирующими метод:: delete.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...