У меня есть это в одном из моих представлений:
<%= link_to "Vote up", :url => {:controller => :votes, :action => :vote_up, :id => i.id},
:update => "total_value_#{i.id}",
:remote => true %>
<%= link_to "Vote down", :url => {:controller => :votes, :action => :vote_down, :id => i.id},
:update => "total_value_#{i.id}",
:remote => true %>
Когда я нажимаю сказать, Проголосовать , я получаю что-то вроде этого в URL:
http://localhost:3000/?remote=true&update=total_value_29&url%5Baction%5D=vote_up&url%5Bcontroller%5D=votes&url%5Bid%5D=29
Действие выполняется в контроллере с именем voice_controller.rb:
class VotesController < ApplicationController
def vote_up
check = Votes.find(:first,
:conditions => ["user_id = ? AND post_id = ?", session[:user_id], params[:id]])
post = Post.find(params[:id])
if check.nil?
vote = Votes.new
vote.post_id = params[:id]
vote.user_id = session[:user_id]
vote.value = true
vote.save
post.total_value += 1
post.save
render :text => post.total_value
elsif check.value == false
check.value = true
check.save
post.total_value += 2
post.save
render :text => post.total_value
else
render :text => "You have already voted up for this post."
end
end
def vote_down
check = Vote.find(:first,
:conditions => ["user_id = ? AND post_id = ?", session[:user_id], params[:id]])
post = Post.find(params[:id])
if check.nil?
vote = Vote.new
vote.post_id = params[:id]
vote.user_id = session[:user_id]
vote.value = true
vote.save
post.total_value -= 1
post.save
render :text => post.total_value
elsif check.value == true
check.value = false
check.save
post.total_value -= 2
post.save
render :text => post.total_value
else
render :text => "You have already voted down for this post."
end
end
end
Я не уверен, нормально ли это или у меня где-то есть синтаксическая ошибка?