2

コントローラーで定義されたメソッドをインデックス ページで使用する方法を知りたいです。ブログに「いいね」ボタンを実装しようとしています。

ポストコントローラー

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

すべての投稿が一覧表示されているインデックスで、このようなことを試してみました。

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

コードを見て思いついたのですが、

<%= link_to 'make a new post', new_post_path %>
<%= link_to 'Edit', edit_post_path(post) %>

インデックスページのコントローラーのメソッドの使い方は
(postController のメソッド)_post_pathだと思っていたのですが、どうやら間違っていたようです。

undefined local variable or method `like_post_path'


同様に(投稿)も試しました。

私の最終的な目標は、この関数を ajax 関数にすることなので、次のような形式になると予想していました。

<% link_to_function 'like', like_post, remote: true %>

この場合、メソッド「like」を使用する正しい方法は何ですか?

4

1 に答える 1

2

これを機能させるには、名前付きルートを定義する必要があります。お気に入り:

# in config/routes.rb
resources :posts do
  member do
    get 'like'
  end

  # OR
  get 'like', :on => :member
end

# in `rake routes` this would show up as:
like_post GET    /posts/:id/like(.:format)  posts#like

# you'd reference in a view like:
like_post_path(@post)
于 2012-11-11T04:15:50.703 に答える