2017-01-08 14 views
-1

私はRailsアプリケーションで "acts_as_votable"という宝石を使用しているので、ユーザーは投稿に投票できます。それはすべて正常に動作します。投稿に投票するためのAjax(ページの更新を停止する)

enter image description here

しかし、あなたはupvoteまたはポスト、ページ全体の更新をdownvote場合。 Ajaxを実装することでこれを変更したいと思います.Ajaxはページ全体をリフレッシュしないための理想的なソリューションです。これは私がこれまで持っているものです。

routes.rbを

resources :posts do 
member do 
    put "like", to: "posts#upvote" 
    put "dislike", to: "posts#downvote" 
end 
end 

post.rb

class Post < ActiveRecord::Base 

belongs_to :user 
acts_as_votable 

validates :user_id, presence: true 
validates :content, presence: true, length: { maximum: 320, 
too_long: "%{count} characters is the maximum allowed" } 
default_scope -> { order(created_at: :desc) } 

end 

posts_controller.rb

class PostsController < ApplicationController 

def index 
..stuff here.. 
end 

def new 
..stuff here.. 
end 

def create 
..stuff here.. 
end 

def destroy 
..stuff here.. 
end 

def upvote 
    @post = Post.find(params[:id]) 
    @post.upvote_by current_user 
    redirect_to :back 
end 

def downvote 
    @post = Post.find(params[:id]) 
    @post.downvote_by current_user 
    redirect_to :back 
end 

private 
def post_params # allows certain data to be passed via form. 
    params.require(:post).permit(:user_id, :content) 
end 

end 

explore.html.erb

<% if @posts.each do |p| %> 
<div class="panel-body"> 
    <p class="post-content"><%= auto_link(p.content, :html => { :target => '_blank' }) %></p> 

    <%=link_to like_post_path(p), method: :put, class: 'btn btn-default btn-sm' do %> 
    <span class="glyphicon glyphicon-chevron-up"></span> like <%=p.get_upvotes.size%></td> 
    <% end %> 

<%=link_to dislike_post_path(p), method: :put, class: 'btn btn-default btn-sm' do %> 
    <span class="glyphicon glyphicon-chevron-down"></span> dislike <%=p.get_downvotes.size%></td> 
<%end%> 

</div> 
<% end %> 

私はAjaxに変換する方法を教えてください。

+2

を私はVです問題を実際に解決する努力を示さず、ちょうどコード釣りであるため、この質問を話題にはならないようにしています。 – max

答えて

1

私のやり方は、あなたのようにそこにそれをすべての私のコントローラにAJAX GETリクエストを送信し、処理することです: (post_controller.rb)私の見解で

def toggle_approve 
    @a = Post.find(params[:id]) 
    @a.toggle!(:visible) 
    render :nothing => true  # I don't my controller to redirect or render 
    end 

私は(このようなAjaxのリンクを作成します_post.erb):私は私のポストルート(routes.rbを)のカスタムルートを持っている私のルートで

<%= link_to "Approve", toggle_approve_post_path(post), :remote => true %> 

resources :posts do 
    get 'toggle_approve', :on => :member 
    end 
関連する問題