我在使用omniauth 通过Twitter 登录的Rails 应用程序中遇到无路由匹配错误。我使用 Railscast 启动了应用程序,其中登录的 Twitter 用户是在这样的会话控制器中创建的
class SessionsController < ApplicationController
def create
twitteruser = Twitteruser.from_omniauth(env["omniauth.auth"])
session[:twitteruser_id] = twitteruser.id
redirect_to twitterquestions_url, notice: "Signed in!"
end
我创建了一个表来存储这样的用户 Twitter 信息
def change
create_table :twitterusers do |t|
t.string :provider
t.string :uid
t.string :name
t.string :image
t.timestamps
end
end
这是一个数据库条目
=> [#<Twitteruser id: 1, provider: "twitter", uid: "1121308772", name: "mytwitteraccou t", image: "http://a0.twimg.com/profile_images/3164285746/.", created_at: "2013-02-12 23:52:44", updated_at: "2013-02-12 23:52:44">]
我还创建了一个这样的 Twitterusers 控制器,以便向用户展示
class TwitterusersController < ApplicationController
def show
@twitteruser = Twitteruser.find(params[:id])
end
end
在路由文件中
resources :twitterusers
基于 rake 路由的输出,我像这样创建了一个指向 currentusers 配置文件的链接(并且还在视图中添加了一个 show.html.erb 文件)
<li>Signed in as <%= link_to "current_user.name", twitteruser_path %>!</li>
耙路线
twitterusers GET /twitterusers(.:format) twitterusers#index
POST /twitterusers(.:format) twitterusers#create
new_twitteruser GET /twitterusers/new(.:format) twitterusers#new
edit_twitteruser GET /twitterusers/:id/edit(.:format) twitterusers#edit
twitteruser GET /twitterusers/:id(.:format) twitterusers#show
PUT /twitterusers/:id(.:format) twitterusers#update
DELETE /twitterusers/:id(.:format) twitterusers#destroy
当我收到这个错误时,我想知道它是否与用户是在 session_controller 中创建的事实有关,所以我在会话控制器中创建了一个显示操作
session_controller
def show
@twitteruser = Twitteruser.find(params[:id])
end
并在路由中创建了会话资源
resources :sessions
然后基于 rake routes 我创建了以下链接
但得到了同样的错误
sessions GET /sessions(.:format) sessions#index
POST /sessions(.:format) sessions#create
new_session GET /sessions/new(.:format) sessions#new
edit_session GET /sessions/:id/edit(.:format) sessions#edit
session GET /sessions/:id(.:format) sessions#show
PUT /sessions/:id(.:format) sessions#update
DELETE
会话控制器中已经有这些路由
match 'auth/:provider/callback', to: 'sessions#create'
match 'auth/failure', to: redirect('/')
match 'signout', to: 'sessions#destroy', as: 'signout'
有人可以指出我做错了什么吗?