0

問題は、ページ上のすべての「into it」ボタンが同じIDを持ち、すべての「undo」が同じIDを持っているため、1つをクリックすると他のボタンがオフセットされることです。また、ボタンは1回だけ切り替わります。私はrails、CSS、ajaxに非常に慣れていないので、助けてくれてありがとう。 ここに画像の説明を入力してください

Micropost_Helper.rb

def toggle_like_button(micropost, user)
  if user.voted_for?(micropost)
    link_to "undo", like_micropost_path(micropost), :class => "btn btn-mini btn-primary", :id =>"unvote_form", :remote => true
  else
    link_to "Into it!", like_micropost_path(micropost), :class => "btn btn-mini btn-primary", :id =>"vote_form", :remote => true
  end
end

マイクロポストコントローラー

def like
  @micropost = Micropost.find(params[:id])
  if @micropost.user_id != @current_user
    if @current_user.voted_for?(@micropost)
      @current_user.unvote_for(@micropost)
      respond_to do |format|
        format.html { redirect_to :back }
        format.js
      end
    else
      @current_user.vote_for(@micropost)
      respond_to do |format|
        format.html { redirect_to :back }
        format.js
      end
    end
  end
end

VIEW / microposts / like.js.erb <-これを使用すると、ボタンを1回だけクリックできます。ここでも、ヘルプが必要です。

$("#vote_form").html("undo")
$("#unvote_form").html("Into it!")
4

1 に答える 1

3

次のように、各ボタンにuniqidを追加する必要があります。

def toggle_like_button(micropost, user)
  if user.voted_for?(micropost)
    link_to "undo", like_micropost_path(micropost), :class => "btn btn-mini btn-primary", :id =>"unvote_form_#{micropost.id}", :remote => true
  else
    link_to "Into it!", like_micropost_path(micropost), :class => "btn btn-mini btn-primary", :id =>"vote_form_#{micropost.id}", :remote => true
  end
end

次に、like.js.erbの1つのボタンを参照できます。

$("#vote_form_<%=@micropost.id%>").html("undo")
$("#unvote_form_<%= @micropost.id%>").html("Into it!")

そうすれば、有効なhtmlが得られ、問題を解決する必要があります。

于 2013-01-04T09:29:30.000 に答える