show action没有匹配的路线

时间:2013-02-15 05:10:27

标签: ruby-on-rails

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

  • 以&lt;%= link_to“current_user.name”登录,session_path%&gt;!
  • 但得到了同样的错误

    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'
    

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

    1 个答案:

    答案 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 %>