2011-08-04 5 views
1

J'ai actuellement un modèle très simple "Coupon". Je suis soudainement intéressé d'ajouter deux autres champs, "redeem_code" et "rachetés" au modèle pour des raisons évidentes.Rails Dilemme non RESTful?

J'aimerais que le commerçant puisse échanger un coupon basé sur un code.

L'approche la plus simple que je peux penser à tout faire serait quelque chose comme ceci:

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 

En ce qui me concerne, les rails ne supporte pas vraiment les interfaces non reposant. J'ai essayé de déterrer des aides de forme hier soir, mais je ne pouvais trouver quoi que ce soit si je viens de mettre togehter quelque chose de réel rapide:

<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> 

J'utilise concevoir. Le bug que je vis actuellement est que lorsque mon utilisateur soumet ce formulaire, il sera automatiquement déconnecté.

Des idées comment je peux résoudre ce problème ou l'implémenter plus élégamment?

Répondre

3

Je suppose qu'il vous manque le jeton d'authenticité (qui empêche Cross Site Request Forgery (CSRF)) qui est généré automatiquement. Vous voulez utiliser le formulaire pour helper pour que cela génère automatiquement.

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

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

+0

explication de Nice! – rubish

+0

Oui, merci! Je n'ai pas kow, vous pouvez utiliser form_for sans une variable de classe – disappearedng