【问题标题】:Ruby-on-rails: routing problem: controller action looks for show when it should look for finalizeRuby-on-rails:路由问题:控制器动作寻找 show 什么时候应该寻找 finalize
【发布时间】:2011-02-01 11:00:54
【问题描述】:

背景:尝试将 twitter gem 用于 ruby​​-on-rails。

在路线中:

map.resources :twitter_sessions
map.finalize_twitter_sessions 'twitter_sessions/finalize', :controller => 'twitter_sessions', :action => 'finalize'

(twitter_sessions 是我的应用程序中 twitter 会话的控制器)。

视图只有一个文件new.html.erb,非常简单:

<% form_tag(twitter_sessions_path)  do |f| %>
   <p><%= submit_tag "twitter!" %></p>
<% end %>

还有 twitter_sessions_controller.rb:

def new
end

def create
  oauth.set_callback_url(finalize_twitter_sessions_url)

  session['rtoken']  = oauth.request_token.token
  session['rsecret'] = oauth.request_token.secret

  redirect_to oauth.request_token.authorize_url
end

def destroy
  reset_session
  redirect_to new_session_path
end

def finalize
  oauth.authorize_from_request(session['rtoken'], session['rsecret'], params[:oauth_verifier])

  profile = Twitter::Base.new(oauth).verify_credentials
  session['rtoken'] = session['rsecret'] = nil
  session[:atoken] = oauth.access_token.token
  session[:asecret] = oauth.access_token.secret

  sign_in(profile)
  redirect_back_or root_path
end

但是,当我点击“twitter”按钮后,我得到了这个错误:

401 Unauthorized

.../gems/oauth-0.3.6/lib/oauth/consumer.rb:200:in `token_request'
.../gems/oauth-0.3.6/lib/oauth/consumer.rb:128:in `get_request_token'
.../gems/twitter-0.9.2/lib/twitter/oauth.rb:32:in `request_token'
.../gems/twitter-0.9.2/lib/twitter/oauth.rb:25:in `set_callback_url'
app/controllers/twitter_sessions_controller.rb:7:in `create'

如果我直接转到 finalize url http://localhost:3000/twitter_sessions/finalize,我会收到此错误:

Unknown action

No action responded to show. Actions: create, destroy, finalize, isLoggedInToBeta, login_required, and new

有什么想法吗? 谢谢

【问题讨论】:

    标签: ruby-on-rails routing twitter-gem


    【解决方案1】:

    我会尝试little different with your routes

    map.resources :twitter_sessions, :collection { :finalize => :get } #use correct verb
    

    【讨论】:

    • 路由按照您定义它们的顺序进行匹配,因此通过在资源之后定义操作,它将将该操作解释为显示操作的 ID
    • 我把它放在其他 twitter_session 路线之前,但不是快乐。我错过了什么?
    • 你能在你的路线中发布所有与 twitter 会话有关的条目吗?
    • 感谢您的帮助,但我的问题更为根本。我在 Twitter 上的应用设置没有检查“浏览器”设置:Facepalm。 stackoverflow.com/questions/1280295/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多