2009-05-08 14 views
1

単純なRoRの質問...私はRORを勉強して、単純な投票アプリを作っています。候補者はテーブルにリストされ、名前の横にupvote/downvoteリンクがあります。すべてのユーザーがリンクをクリックして投票数が更新され、最初のページにリダイレクトされるようにしています。私は足場を使っていません。ショーを、しかし:ルビー:リンクの更新DB

def upvote 
    @name = Name.find(params[:id]) 
    @name[:votes] += 1 
    respond_to do |format| 
    if @name.update_attributes(params[:name]) 
     flash[:notice] = 'Candidate was upvoted' 
     format.html = { redirect_to :action => "index" } 
     format.xml = { head :ok } 
    else 
     format.html = { render :action => "index" } 
     format.xml = { render :xml => @name.errors, :status => :unprocessable_entity } 
    end 
    end 
end 

私は正しいアクションを呼び出すビュー内のリンクを持っている、呼び出ししようとしている:何らかの理由でこのアクションは、私が欲しいものに近い何もしていません。

あまりにも厳しく私を判断しないでください...笑

答えて

4

update_attributes方法は、一般的に、フォームのPOSTからのActiveRecordオブジェクトのフィールドを設定するために使用されます。フィールドはハッシュparams[:name]として見つけられます。 params[:name][:votes]

あなたがupvoteメソッドを呼び出すためにリンクをクリックされている場合は、あなただけのGET要求を行っています。レコードを保存するには、@name.saveに電話するだけです。

def upvote 
    @name = Name.find(params[:id]) 
    @name[:votes] += 1 
    respond_to do |format| 
    if @name.save 
     flash[:notice] = 'Candidate was upvoted' 
     format.html = { redirect_to :action => "index" } 
     format.xml = { head :ok } 
    else 
     format.html = { render :action => "index" } 
     format.xml = { render :xml => @name.errors, :status => :unprocessable_entity } 
    end 
    end 
end 

EDIT:コメントからは、我々はまた、ルートが不適切に設定されたことと、必要なビューのlink_toコードが@name.idを含めることが決定しました。

+0

それはまだ何もしない、とにかく...何らかの理由では、「show」アクションにあなたの助けに感謝を行く、私の問題は、コントローラであってはならない... –

+0

ええ、私はそれが示すことが奇妙だと思いましたアクションが呼び出されています。リンクを作成するために使用しているビューにコードを表示することもできます。また、ルートが設定されている場合は、それも知っておくと便利です。 – Schrockwell

+0

<%@ names.each do | name | %> ​​<%= LINK_TO "UP"、:アクション=>:upvote%>/<%= LINK_TO "DOWN"、:アクション=>:downvote%> ​​<%= H name.candidate_name% > <% end %> –

3

一般的に表示するためにマップするRESTfulなURLは次のとおりです。だから、

my_resource/id 

、例えば、

candidates/1 

だけの推測では、あなたがのcon​​fig/routes.rbをして見れば、私は賭けます

map.resources :candidates 

ここで、my_resourceはコントローラの名前です。この種のルーティングを使うつもりなら、リソースはどのようにアップボーニングを提供しますか?カスタムメソッドは、そう、この場合には賢明なようだ:あなたが前と後

rake routes | grep candidate 

を実行する場合

map.resources :candidates, :collection => { :upvote => :post } 

、あなたが追加されているものを見ることができます。お役に立てれば。

+0

あなたの助けをありがとう! –

関連する問題