

railsのwebアプリでいいね機能を実装したいです。  
ルーティングが間違っているのか、chromeでlocalhostで検証していいねのボタンをクリックしたところ、ビューには何も変化はなく、コンソールでは

  
destroyメソッド =>  
POST <http://localhost:3000/translations/103/likes/2> 404 (Not Found)  
createメソッド =>  
POST <http://localhost:3000/translations/104/likes> 404 (Not Found)  
となっており、ルーティングがうまく行ってないみたいなのですが、どこが悪いのかよく分かりません。  
どなたか教えていただけませんか！！

likes
controllerのdestroyのはじめにbinding.pryをつけても同じエラーなので、likes#destroy(またはcreate)にパスが通ってないみたいです、、

[code]

    > routes.rb
    
    　resources :translations do
        resources :likes, only: [:create, :destroy]
      end
    
    > show.html.erb
    
    <% @translations.each do |translation| %>
    ...
      <%= render "likes/like", translation:translation %>
    ...
    <% end %>
    
    > likes/_like.html.erb
    
    <% if translation.like_user(@current_user.id) %>
                <%= button_to translation_like_path(translation_id: translation.id),
                 method: :delete, id: "like-button", class: "btn-like",  remote: true do %>
                <%= image_tag('/icons/like-red.png') %>
    <% end %>
    
    <%= button_to translation_likes_path(translation_id: translation.id), id: "like-button", class: "btn-like", remote: true do %>
      <%= image_tag('/icons/like.png') %>
    <% end %>
    
[/code]

コンソールでrake routesすると、

[code]

    translation_likes POST   /translations/:translation_id/likes(.:format)     likes#create
    translation_like DELETE /translations/:translation_id/likes/:id(.:format) likes#destroy
    
[/code]

となってます。


CC BY-SA 3.0
2018-04-07T10:47:51.817
43034
2018-04-08T20:46:09.143
2018-04-08T03:33:06.080
25856
25856
question
ruby-on-rails
railsのルーティングがurlはあってそうなのにコントローラに通らない


log/development.log で当該アクセス近辺のログも出して頂けた方が、より適切な回答が得られる話のように見えます。  
LikesController#create/destroy の情報取得周りとエラー処理なども、でしょうか。

提示されている情報では LikesController#create/destroy に回されている形に見えますが、例えば controller
のコード側で「指定された ID の情報が見つからなかったら 404
を返す形にしている」の場合、ルーティングの失敗なのか指定された情報の読み込み失敗なのかが判別できません。

LikesController#create で Translation.find(params[:id]) 的な事をしていたら「そりゃ
:translation_id じゃないと見つからないよね」ですし、#destroy の方でも :id と :translation_id
の指定ミスなどもあり得ます。  
「情報が見つからなかったら 404 にする」といったことは普通に行われるので、「なぜか 404
になる」は、経路設定だけではなくコード側の可能性もあるので、コントローラー周りのコードもないとコメントのしようがないと思いますよ。


CC BY-SA 3.0
2018-04-08T20:46:09.143
43067
2018-04-08T20:46:09.143
13613
43034
answer