我目前有一个非常简单的模型“优惠券”。我突然有兴趣再添加两个字段“redeem_code”和“redeemed”,原因很明显。
我想让商家根据代码兑换优惠券。
我能想到的最简单的方法就是这样:
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
就我而言,rails并不真正支持非restful接口。我昨晚尝试挖掘表格助手,但我找不到任何东西,所以我只是快速地把事情搞得一团糟:
<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>
我正在使用设计。我现在遇到的错误是当我的用户提交此表单时,他/她将自动注销。
我有什么想法可以解决这个问题或者更优雅地实现它?
答案 0 :(得分: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