0

我在使用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 我创建了以下链接

  • 以 <%= link_to "current_user.name", session_path %> 身份登录!
  • 但得到了同样的错误

    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'
    

    有人可以指出我做错了什么吗?

    4

    1 回答 1

    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 %>
    
    于 2013-02-15T05:13:24.887 回答