我正在尝试为我的用户创建个人资料页面,但是由于路由错误,我会在用户登录时立即停止。即使我尝试加载第一页,我也会再次遇到同样的问题。当我做一个rake路线时,我得到了这些用户路径:
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
user_omniauth_authorize /users/auth/:provider(.:format) users/omniauth_callbacks#passthru {:provider=>/facebook|twitter/}
user_omniauth_callback /users/auth/:action/callback(.:format) users/omniauth_callbacks#(?-mix:facebook|twitter)
user_password POST /users/password(.:format) devise/passwords#create
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
PUT /users/password(.:format) devise/passwords#update
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
user_registration POST /users(.:format) devise/registrations#create
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
PUT /users(.:format) devise/registrations#update
DELETE /users(.:format) devise/registrations#destroy
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
这就是我的Users :: OmniauthCallbacksController的样子:
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
@user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user)
if @user.persisted?
sign_in_and_redirect @user, :event => :authentication
set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format?
else
session["devise.facebook_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
end
我不确定这一点,但我认为我应该创建一个UsersController,我可以在其中实现设备之外的方法。这就是它的样子:
class UsersController < ApplicationController
def index
@users = User.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @ingredients }
end
end
def profile
@user = current_user
respond_to do |format|
format.html
format.json { render json: @ingredients }
end
end
def show
@user = User.find(params[:id])
respond_to do |format|
format.html
format.json { render json: @ingredients }
end
end
end
在我的routes.rb中,我有以下用户相关的行:
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
resources :users
现在,如果我在用户登录时加载第一页,我收到错误:
Routing Error
No route matches {:action=>"show", :controller=>"users"}"
有什么想法吗?
答案 0 :(得分:2)
“设计用户”和“用户”都试图抓住“/ users”路由。解决这个问题的最简单方法是告诉设计使用前缀:
devise_for :users,
:path_prefix => 'auth',
:controllers => {
:omniauth_callbacks => "users/omniauth_callbacks"
}
resources :users
现在设计身份验证将发布到“auth_users”,您的CRUD仍将执行“/ users”
答案 1 :(得分:2)
使用Devise和自定义用户控制器时,这是一个示例routes.rb
文件。我遇到了一些路径冲突的问题,我想要请求转到我的用户控制器,但是他们要去设计。
我在注册网址上遇到了一些具体问题。您可能要么针对遇到问题的URL执行类似操作,要么只需指定自定义用户控制器的最后一行即可。
Railsappname::Application.routes.draw do
root :to => "home#index"
devise_for :users, :skip => [:sessions, :registrations]
devise_scope :user do
# make some pretty URLs
get "login" => "devise/sessions#new", :as => :new_user_session
post 'login' => 'devise/sessions#create', :as => :user_session
delete "logout" => "devise/sessions#destroy", :as => :destroy_user_session
# rewrite the registrations URLs so they don't collide with my custom Users Controller
get "signup" => "devise/registrations#new", :as => :new_user_registration
put "update-registration" => "devise/registrations#update", :as => :update_user_registration
delete "delete-registration" => "devise/registrations#destroy", :as => :delete_user_registration
get "edit-registration" => "devise/registrations#edit", :as => :edit_user_registration
get "cancel-registration" => "devise/registrations#cancel", :as => :cancel_user_registration
post "create-registration" => "devise/registrations#create", :as => :user_registration
end
resources :users, :controller => "users"
end