我在使用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路由的输出,我创建了一个指向当前用户配置文件的链接(并在视图中添加了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
当我收到该错误时,我想知道是否与用户是在sessions_controller中创建的事实有关,因此我在会话控制器中创建了一个show动作
sessions_controller
def show
@twitteruser = Twitteruser.find(params[:id])
end
并在路径中创建会话资源
resources :sessions
然后根据rake路线我创建了以下链接
但得到了同样的错误
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'
有人可以指出我做错了什么吗?
答案 0 :(得分:2)
尝试更改:
<%= link_to "current_user.name", twitteruser_path %>
为:
<%= link_to current_user.name, twitteruser_path(current_user) %>
并修改此部分,仅在填充current_user
时进行渲染:
<% if current_user %>
Your link here
<% end %>