我目前有一个非常简单的模型“优惠券”。出于显而易见的原因,我突然对在模型中添加两个字段"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>
我正在使用devise。我现在遇到的错误是,当我的用户提交此表单时,他/她将自动注销。
有什么想法可以让我解决这个问题或者更优雅地实现它吗?
发布于 2011-08-05 03:28:28
我的猜测是您缺少自动生成的身份验证令牌(阻止Cross Site Request Forgery (CSRF))。您想要使用表单的helper for,它会自动生成它。
<%= form_for(:coupon, :url => deals_redeem_post_path) do |f| %>
http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for
https://stackoverflow.com/questions/6947385
复制相似问题