2017-02-24 5 views
0

として巻き取るPUT、 レール5.0.0アプリレール5ルーティング、アクションは/ downvote "スキル" をupvoteするacts_as_votable宝石を使用してGET

routes.rbを:

resources :skills do 
    member do 
     patch "upvote", to: "skills#upvote" 
     put "downvote", to: "skills#downvote" 
    end 
    end 

スキルコントローラ:

def upvote 
    @skill.upvote_from current_user 
    redirect_to skill_path(@skill.id) 
    end 

    def downvote 
    @skill.downvote_from current_user 
    redirect_to skill_path(@skill.id) 
    end 

ビュー:

<%= link_to "Up Vote", upvote_skill_path(skill), method: :put %> 

このHTMLを生成します:

<a rel="nofollow" data-method="put" href="/skills/98/upvote">Up Vote</a> 

が、リンク、何とかそのGETクリック:損失で

upvote_skill PUT /skills/:id/upvote(.:format)  skills#upvote 
    downvote_skill PUT /skills/:id/downvote(.:format) skills#downvote 

イム:

Started GET "/skills/98/upvote" for 192.168.0.2 at 2017-02-23 22:46:07 -0500 

ActionController::RoutingError (No route matches [GET] "/skills/98/upvote"): 

'すくいルート' 出力が右に見えますが..私が考えることができる唯一の事は、このアプリケーションはAPIのみのアプリケーションとして生活を始めたことですhttp://edgeguides.rubyonrails.org/api_app.htmlしかし、私はすべての " 3.2。しかし、私は何かを逃しているかもしれない?

+0

コントローラで 'upvote'を2回定義しているので、タイプミスがあると思います。 – rogelio

+0

jsコードがa要素のクリックイベントをインターセプトしていますか?そうであれば、e.preventDefault/e.stopPropagationを実行した後、GETを起動し、あなたのdata-method = "put"を無視します。 –

+0

@rogelioはそれを修正しましたが、変更はありません。 – sysconfig

答えて

2

Railsはこのタイプのアクションを実行するために控えめなjavascriptを使用しています。アプリがapi-onlyで始まり、このモードにはassetsviewsは含まれていない可能性があります。あなたはjavascriptの

<!-- app/views/layouts/application.html.erb --> 
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> 

を含めていることを確認あなたのapplication.html.erbあなたapplication.jsは、その後、少なくともこれらの定義最後に

// app/assets/javascripts/application.js 
//= require jquery 
//= require jquery_ujs 

Gemfileニーズ

gem 'jquery-rails' 

を持たなければならないで

:bundle、サーバをリロードして、もう一度テストしてください。

+0

ええ、これはそれでした。 uggh ..間違いなく、APIのみのアプリからフルレイルアプリへの変換の残り物。期待どおりに働いています。ありがとう! – sysconfig

+0

うん、おそらくあなたはこの変換のためにもっと欠けているものがあるかもしれません。 – rogelio

関連する問題