1

問題:ブログに「いいね」機能を実装しようとしています

PostIndex:

<% @posts.each do |post| %>
<tr>
<td><%= post.name %></td>
<td><%= link_to post.content, post %></td>
<td><%= post.created_at.strftime("%Y/%m/%d, %I:%M%p") %></td>
<td><%= post.view %></td>
<td><%= post.like %></td>
<td><%= post.hate %></td>
<td><%= link_to 'like', like_post_path(post), :remote => true %></td>
</tr>
<% end %>

PostController:

def like
 @post = Post.find(params[:id])
 @post.like += 1
 @post.save

 respond_to do |format|
    format.js
 end
end

app / views / posts / like.js.erb

$('#post').html("<%=j @post.like %>");

質問:
like.js.erbで見ている投稿を正しく指し示していないと思います。
インデックスファイルでは、<%= @ post.view%>を実行するだけで機能しました。しかし、like.js.erbでどのようにそれを行いますか?

4

2 に答える 2

1

ajax呼び出し後に更新する場合は、HTML内の投稿のようなカウントに識別子が必要です。

PostIndex:

<% @posts.each do |post| %>
  <tr>
    <td><%= post.name %></td>
    <td><%= link_to post.content, post %></td>
    <td><%= post.created_at.strftime("%Y/%m/%d, %I:%M%p") %></td>
    <td><%= post.view %></td>
    <td id= "post<%= post.id %>_like"><%= post.like %></td>  <!-- set id (identifier) here -->
    <td><%= post.hate %></td>
    <td><%= link_to 'like', like_post_path(post), :remote => true %></td>
  </tr>
<% end %>

次に、app / views / posts / like.js.erbで、

<% if @post.errors.blank? %>
  $("#post<%= @post.id %>_like").html("<%=j @post.like %>");
<% end %>
于 2012-11-11T06:21:11.443 に答える
0

Ajaxを使用してテーブル行を修正する完全な方法:

show.html(またはindex.html)ファイルには、おそらくすでにテーブルがあります。

<tr>
 <td>row 1</td>
 <td>row 2</td>
 <td>row 3</td>
</tr>

行がある種の変数を表すとしましょう。その場合、上の表は次のようになります。

<tr>
 <td><%= @variableA %></td>
 <td><%= @variableB %></td>
 <td><%= @variableC %></td>
</tr>

ページ全体をリロードせずにvariableAを変更したい。だから私はAjaxを使います。

私の方法:

def fixvar
 @variableA = 2
end

Ajaxを使用するには、1つのコンポーネントを追加する必要があります。

def fixvar
 @variableA = 2
end

respond_to do |format|
 format.js
end

そして、あなたが望むところならどこでも、ajaxを介して変更を呼び出すリンクがあります。

<%= link_to 'change variable A', URLof_fixvar(@variableA), :remote => true %>

オプション:remote => trueを使用すると、link_toメソッドでajaxコンポーネントを使用します。それに応じて、config/routes.rbでURLof_fixvarを設定する必要があります。ルーティング

テーブルのどこを更新するかを指定しましょう。

<tr>
 <td id="variable_change_<%= @variableA.id %>><%= @variableA %></td>
 <td><%= @variableB %></td>
 <td><%= @variableC %></td>
</tr>

更新しようとしている行を指定するために、上記のように実行しました。たとえば、行はvariable_change_1として定義されています。(variableA.idが1であると仮定)

次に、関連するビューフォルダーに移動し、上記で定義したメソッドに関連する.js.erbファイルを作成する必要があります。たとえば、PostControllerで「like」メソッドを定義していたので、

app/views/posts/like.js.erb

ここでは、1行のコードのみが必要です。

$("#variable_change_<%= @variable.id %>").html("<%= @variableA %>");

.htmlの前の最初の部分は指定された行を指しており、後の部分は更新する値です。終わり!

于 2012-11-11T08:34:48.027 に答える