2011-08-04 14 views
1

私は現在非常に単純なモデル "クーポン"を持っています。私は突然、「redeem_code」と「redeemed」の2つのフィールドを明示的な理由でモデルに追加することに興味があります。Rails非RESTfulジレンマ?

私は、商人がコードに基づいてクーポンを利用することを見たいと考えています。

私はへの考えることができる最も簡単な方法は、ただ、これはこのようなものになるだろうか。

def redeem 
    #renders the page 
    end 

    def redeem_post 
    redeem_code = params[:redeem_code] 
    deal = Deal.find_by_redeem_code(redeem_code) 

    if deal.nil? 
     # BUG: Somehow here you will be logged out 
     redirect_to deals_path 
    else 
     if deal.update_attribute(:redeemed, true) 
     redirect_to deals_path 
     end 
    end 
    end 

私に関する限り、レールは本当に非安らかなインタフェースをサポートしていません。私は昨夜フォームヘルパーを掘り起こしてみましたが、私は本物の速い何かtogehter置くので、私は何かを見つけることができませんでした:私が考案し使用しています

<form action="<%= deals_redeem_post_path %>" method="post"> 

    <table> 
    <tr> 
     <th> Code: </th> 
     <td> <input type="text" name="redeem_code" /> </td> 
    </tr> 
    <tr> 
     <th></th> 
     <td> <input type="submit" text="Submit" /> </td> 
    </tr> 
    </table> 

</form> 

。私が今経験しているバグは、ユーザーがこのフォームを送信すると、自動的にログアウトされます。

どのように私はこれを修正することができますかこれをよりエレガントに実装する任意のアイデア?

答えて

3

私の推測では、自動的に生成される真正性トークン(これはCross Site Request Forgery (CSRF)を防ぎます)が欠けていると思います。これを自動的に生成するヘルパー用のフォームを使用したいとします。

<%= form_for(:coupon, :url => deals_redeem_post_path) do |f| %> 

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for

+0

ニース説明! – rubish

+0

うんうん!私はクラス変数なしでform_forを使うことができます – disappearedng