Ruby-on-rails: проблема маршрутизации: действие контроллера ищет шоу, когда оно должно искать финализацию - PullRequest
0 голосов
/ 27 марта 2010

фон: попытка использовать драгоценный камень twitter для 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

Однако, после того, как я нажму кнопку «твиттер», я получаю эту ошибку:

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'

Если я сразу перейду к окончательному URL-адресу http://localhost:3000/twitter_sessions/finalize, я получу эту ошибку:

Unknown action

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

Есть идеи? Спасибо

1 Ответ

4 голосов
/ 27 марта 2010

Я бы попробовал что-то немного другое с вашими маршрутами :

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