3

postsRails アプリで生成された足場があり、投稿モデルにupvoteand列を追加しました。downvoteビューファイルに「賛成票」ボタンを追加しました。賛成票ボタンを押したときにAJAX呼び出しを行い、データベースにクエリを実行する必要がありますが、賛成票ボタンには実際のRails<form>が添付されていません。この AJAX 呼び出しを行い、賛成票を投じられた投稿のデータベースに賛成票を追加するにはどうすればよいですか?

この AJAX 呼び出しを行うと、次のようになります。

$('.up,.down').click(function(){
    $.ajax({
      type: 'POST',
      url: '/posts',
      dataType: 'JSON',
      data: {
        post: {
          upvote: 1
        }
      },
      success: function(){
        alert('success')
      }
    });
  });

500 エラーを返します。ここからどこへ行けばいいですか?

4

1 に答える 1

7

たとえば:remote => true、ヘルパーで属性を使用できます。link_to

<%= link_to post_upvote_path(post), :remote => true, :method => "put" %>
<%= link_to post_downvote_path(post), :remote => true, :method => "put" %>

次にconfig/routes.rb

resources :posts do
  put "upvote", :to => "posts#upvote", as: :upvote
  put "downvote", :to => "posts#downvote", as: :downvote
end

params[:id]次に、おそらくすでにそうであるように、投稿コントローラーで投票を処理し、アクションで投稿IDを取得します

これはレール風味の控えめなjavascriptの紹介です

更新
作成された賛成票と反対票のルートを表示するには、ターミナルに移動して次のように入力します。

rake routes | grep vote

これにより、名前に「投票」が含まれるすべてのルートのリストが表示されます。または、入力rake routesしてすべてのリストを取得します。最初の列は名前付きルートです。アプリで使用するには、末尾に「_path」を追加するだけです。post_upvote_path上記のように表示されます。

post_upvote  PUT  /posts/:id/upvote(.:format) posts#upvote

PostsController では、次のアクションが必要になります。

class PostsController < ApplicationController
  ###
  # index, show... other RESTful actions here
  ###


  def upvote
    @post = Post.find params[:id]
    # code for however you are voting up the post here
  end

  def downvote
    @post = Post.find params[:id]
    # code for however you are voting down the post here
  end
end
于 2013-01-10T00:57:36.523 に答える