23509


ajaxを使って書いたいいね（likeと定義）リンクがおささりません。リンクは画面上に表示されているのですが。  
コードに問題があるのでしょうか？それともPCに必要なアプリケーションが導入されていないのでしょうか？  
コードは、  
likes_controller.rbが

[code]

    class LikesController < ApplicationController
    
        before_action :authenticate_user!
    
      def like
        @note = Note.find(params[:note_id])
        like = current_user.likes.build(note_id: @note.id)
        like.save   
      end
    
      def unlike
        @note = Note.find(params[:id])
        like = current_user.likes.find_by(note_id: @note.id)
        like.destroy
      end
    end
    
[/code]

_like_links.html.erbが

[code]

    <% if current_user.likes.find_by(note_id: @note.id) %>
      <%= link_to 'いいね！を取り消す', unlike_path(@note.id), method: :delete, remote: true %>
      <% else %>
      <%= link_to 'いいね！', like_path(@note.id), method: :post, remote: true %>
      <% end %>
    
[/code]

like.js.erbが

[code]

    $('#like-link').html('<%= escape_javascript(render("likes/like_links", note: @note)) %>');
    $('#like-count').html('<%= @note.likes.count %>');
    
[/code]

unlike.js.erbが

[code]

    $('#like-link').html('<%= escape_javascript(render("likes/like_links", note: @note)) %>');
    $('#like-count').html('<%= @note.likes.count %>');
    
[/code]

usersフォルダのshow.html.erが

[code]

    <p id="notice" class="alert-success"><%= notice %></p>
    
    <aside class="sidebar">
     <section>
        <span class="label">プロフィール画像</span>
        <h3 class="user-info">
          <%= image_for(@user) %>
        </h3>
      </section>
    
     <section>
      <span class="label">Name:</span>
      <h3 class="user-info"><%= @user.name %></h3>
     </section>
    
     <section>
      <span class="label">Email:</span>
      <h3 class="user-info"><%= @user.email %></h3>
     </section>
    
     <%= link_to @user.likes.count, like_notes_user_path(@user.id) %>個の投稿にいいね！しています
    
    
    <% if current_user?(@user) %>
     <section>
        <small><%= link_to　"プロフィールを編集",edit_user_path(@user) %></small>
     </section>
     <% end %>
    
    </aside>
    
    <ul class="notes">
         <h2><%= @title %></h2>
         <%= render @notes %>
    </ul>
    
[/code]

notesフォルダのshow.html.erが

[code]

    <p id="notice" class="alert alert-success">
      <%= notice %>
    </p>
    
    <h2>今何してる？</h2>
    <p><%= @note.content %></p>
    
    <div id="like-link">
      <!-- 送信先とmethodを指定してください -->
      <%= render "likes/like_links", note: @note %>
    </div>
    
    <div>
      <small>
        <%= link_to @note.likes.count, liking_users_note_path(@note.id), id: "like-count" %>人がいいね！といっています
      </small>
    </div>
    
    <% if current_user?(@note.user) %>
    <%= link_to "つぶやく", edit_note_path(@note.id),class:"edit" %>
    <%= link_to "削除", destroy_note_path(@note.id), method: "delete", class: "destroy", "data-confirm" => "本当に削除しますか？" %>
    <% end %>
    
[/code]

liking_users.html.erbが

[code]

    <ul class='show-note'>
      <%= render @note %>
    </ul>
    
    <h2 class="heading">いいねしているユーザー一覧 </h2>
    <ul class='user-list'>
      <!-- ここでパーシャルファイルを呼び出してください -->
      <%= render @users %>   
    </ul>
    
[/code]

です。

追加です。  
いいね！ボタンが正常におささると、  
「いいね！  
0人がいいね！といっています」（いいね！と０人の所は押すことができます）  
と表示されているところが、  
「いいね！を取り消す  
1人がいいね！といっています」（いいね！を取り消すと１人の所は押すことができます）  
と変化します。

routes.rbには

[code]

    Rails.application.routes.draw do
    
      devise_for :users
    
      resources :users, only: [:index, :show, :edit, :update,:like] do
        member do
          get :like_notes
        end
      end　　　←ここ
    
      resources :notes, only: [:show, :create, :edit, :update, :destroy] do
        member do
          get :liking_users
        end
      end　　　　←ここ
    
    
      get'/top' => 'home#top'
    
      get'/connection' => 'home#connection'
      get'/notes/new' => 'notes#new'
      post'/notes' =>'notes#create'
      get'/notes' =>'notes#index'
      get'/show/:id' => 'notes#show'
      patch'/notes/:id' =>"notes#update",as:'update_note'
      delete'/notes/:id' =>"notes#destroy",as:'destroy_note'
    
    
      post '/like/notes/:id' => 'likes#like', as: 'like'
      delete '/unlike/notes/:id' => 'likes#unlike', as: 'unlike'
    
      root 'home#top'
      get'/about' => 'home#about'
    end
    
[/code]

で←ここでしめした所が該当するルーターです。  
お願いいたします。


CC BY-SA 3.0
2016-03-26T12:53:22.257
23488
2016-03-27T13:57:15.540
2016-03-27T12:49:01.393
14754
14754
question
ruby-on-rails
ajaxを使って書いたリンクがおささりません


とりあえずこの部分に不整合がありますね。  
likes_controller.rb:

[code]

        @note = Note.find(params[:note_id])
    
[/code]

・`:note_id`でパラメータを取得している。

routes.rb:

[code]

      post '/like/notes/:id' => 'likes#like', as: 'like'
    
[/code]

・`:id`としてパラメータを定義している。

この両者は一致させておかないと正しくパラメータが取得できていないはずです。`unlike`側ではroutes.rbでもlikes_controller.rbでも`:id`で参照していますが、`like`側も`params[:id]`として参照すべきでしょう。

かなりややこしい処理なので、他にも何かあるかもしれません。この修正を施してもまだダメな時は、(その時のコードで)一体どんな動作になっているか(ログが取れるならログも含めて)できるだけ詳しい情報をお知らせください。


CC BY-SA 3.0
2016-03-27T13:57:15.540
23509
2016-03-27T13:57:15.540
13972
23488
answer