2014-09-07 2 views
1

리모컨을 사용하여 link_to가 있습니다. 클릭시 상태를 토글하는 특정 기능에서 POST를 통해 true를 반환합니다. 그러나 레일을 토글하려고 할 때마다 레일스는 첫 번째 시도에서만 404로 응답하지만 두 번째 시도에서는 정상적으로 작동합니다. 경로가 제대로 작동하고 올바르게 구성되었지만 첫 번째 클릭이 항상 404를 반환하는 이유는 알 수 없습니다.이 문제는 Chrome 및 Firefox에서만 발생하며, 개발 만 잘 진행됩니다. 나는 레일 4.1과 루비 2.1.1p76을 사용하고link_to ... remote : true, method : 첫 번째 시도에서 항상 POST가 실패합니다.

는 유니콘 + Nginx에 여기

우분투

에 로그 메시지입니다 :

I, [2014-09-07T07:51:27.251225 #18157] INFO -- : Started POST "/u/alexandre/recommend/gigantes-de-aco-e-pontas-soltas" for 101.138.232.14 at 2014-09-07 07:51:27 +0000 
F, [2014-09-07T07:51:27.254116 #18157] FATAL -- : 
ActionController::RoutingError (No route matches [POST] "/u/alexandre/recommend/gigantes-de-aco-e-pontas-soltas"): 
    actionpack (4.1.0) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call' 
    actionpack (4.1.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call' 
    railties (4.1.0) lib/rails/rack/logger.rb:38:in `call_app' 
    railties (4.1.0) lib/rails/rack/logger.rb:20:in `block in call' 
    activesupport (4.1.0) lib/active_support/tagged_logging.rb:68:in `block in tagged' 
    activesupport (4.1.0) lib/active_support/tagged_logging.rb:26:in `tagged' 
    activesupport (4.1.0) lib/active_support/tagged_logging.rb:68:in `tagged' 
    railties (4.1.0) lib/rails/rack/logger.rb:20:in `call' 
    actionpack (4.1.0) lib/action_dispatch/middleware/request_id.rb:21:in `call' 
    rack (1.5.2) lib/rack/methodoverride.rb:21:in `call' 
    rack (1.5.2) lib/rack/runtime.rb:17:in `call' 
    activesupport (4.1.0) lib/active_support/cache/strategy/local_cache_middleware.rb:26:in `call' 
    rack (1.5.2) lib/rack/sendfile.rb:112:in `call' 
    railties (4.1.0) lib/rails/engine.rb:514:in `call' 
    railties (4.1.0) lib/rails/application.rb:144:in `call' 
    unicorn (4.8.3) lib/unicorn/http_server.rb:576:in `process_client' 
    unicorn (4.8.3) lib/unicorn/http_server.rb:670:in `worker_loop' 
    unicorn (4.8.3) lib/unicorn/http_server.rb:525:in `spawn_missing_workers' 
    unicorn (4.8.3) lib/unicorn/http_server.rb:536:in `maintain_worker_count' 
    unicorn (4.8.3) lib/unicorn/http_server.rb:294:in `join' 
    unicorn (4.8.3) bin/unicorn_rails:209:in `<top (required)>' 
    /usr/local/rvm/gems/ruby-2.1.1/bin/unicorn_rails:23:in `load' 
    /usr/local/rvm/gems/ruby-2.1.1/bin/unicorn_rails:23:in `<main>' 
    /usr/local/rvm/gems/ruby-2.1.1/bin/ruby_executable_hooks:15:in `eval' 
    /usr/local/rvm/gems/ruby-2.1.1/bin/ruby_executable_hooks:15:in `<main>' 


I, [2014-09-07T07:51:31.251047 #6505] INFO -- : Started POST "/u/alexandre/recommend/gigantes-de-aco-e-pontas-soltas" for 101.138.232.14 at 2014-09-07 07:51:31 +0000 
I, [2014-09-07T07:51:31.254408 #6505] INFO -- : Processing by UsersController#recommend as JS"/u/alexandre/recommend/gigantes-de-aco-e-pontas-soltas" for 101.138.232.14 at 2014-09-07 07:51:31 +0000 

routes.rb

resources :users, :param => :id, constraints: {id: /.*/}, only: [:new, :create, :edit, :update], path: "u" do 
    post "/recommend/:text_id/" => "users#recommend", as: "recommend" 
end 

_bookshelf_actions.html.haml

%ul#bookshelf-actions 
    %li#recommend.is-action.text-center 
    %span#recommendation-count.count= text.recommendations_count 
    = link_to '', recommend_url , remote: true, method: :post, id: "recommend-btn", class: 'reader-social-icon social-action is-recommend', data: {recommended: recommended} 
    %span#recommendation-status.action-name= t(:recommend, count: @current_user ? (@current_user.recommended?(text) ? 1 : 0) : 0) 

내가 주변에 검색 좀이 문제 또는 이와 유사한 대해 아무것도 발견하지 않은

def recommend 
    text = Text.friendly.find(params[:text_id]) 
    @user.recommend(text) 
    respond_to do |format| 
     status = I18n.t(:recommend, count: @user.recommended?(text) ? 1 : 0) 
     text.reload 
     counter = text.recommendations_count 
     format.json {render json: {status: status, recommended: @user.recommended?(text), counter: counter}, status: :ok} 
    end 
    end 

text.js.coffee

@text.actions.recommend.on 'ajax:success', (e, data) -> 
    self.text.actions.recommend.attr 'data-recommended', data.recommended 
    $('#recommendation-status').text data.status 
    $('#recommendation-count').text data.counter 
    return 

users_controller.rb. 어떤 도움이 정말 감사하겠습니다! 감사합니다

+2

당신이 브라우저 콘솔에서 오류를 볼 수 있습니까 : member do ... end을 사용하면이 경로를 예상과 일치합니다? 또한 로그에 오류가 발생했습니다. ActionController :: RoutingError – Mandeep

+0

서버를 직접 설정 했습니까? 유니콘을 사용하고 있습니다 -이 로그는 있습니까? –

+1

경로에 문제가있을 수 있습니다. "회원님이 게시물을 추천"/ 추천 :/text_id/"="사용자 # 추천 ", 다음과 같이 : 자원에"끝내십시오 "라고 말하십시오. – Thanh

답변

2

경로에 문제가 있습니다. 자원에 member 또는 collection없이 경로를 배치 한 문서를 찾지 못했습니다. 사용자 설정 경로로 링크가 어쩌면 일치 :

u/recommend/:text_id

그래서 당신이 사용해야 자원 노선의

member do 
    post "/recommend/:text_id/" => "users#recommend", as: "recommend" 
end 

합니다.

경로가 사용자 자원의 ID를 놓 쳤기 때문에 오류가 있다고 생각합니다.

/u/:id/recommend/:text_id

관련 문제