【发布时间】:2017-08-17 15:25:02
【问题描述】:
当访问我们网站的第一页时,系统会提示用户输入“优惠券代码”以继续到下一页。优惠券可以多次使用,但必须存在于 coupon_codes 表的“code”字段中。
如果用户输入的代码存在于 coupon_codes 表中,他们应该会自动被重定向到下一页。如果用户输入的代码在 coupon_codes 表中不存在,则应显示错误并提供重试选项。
我确信我让这件事变得比需要的更困难,因为我已经断断续续地工作了好几天。我已经能够让它成为我觉得很接近的东西,但并不完全在那里。有多种变化和试验,但这是我目前所处的位置。
型号(优惠券代码):
def self.code(code)
if code
self.exists?(['code = ?', "#{code}"])
##move on to /design
else
##display error
end
end
查看(索引):
<%= form_tag coupon_code, :method => 'get' do %>
<%= text_field_tag :code, params[:code] %>
<%= submit_tag("Check my coupon", :name => nil) %>
<% end %>
控制器:
def index
@coupon_codes = CouponCode.code(params[:code])
end
在重新渲染我已经打开的页面之前,日志显示以下内容(输入正确的代码后):
CouponCode Exists (0.2ms) SELECT 1 AS one FROM `coupon_codes` WHERE (code = 'correct') LIMIT 1
如果我使用 rails 控制台,它似乎应该可以工作(假设我使用正确),我只是不确定如何让它继续运行或显示错误。
2.1.1 :001 > code = 'correct'
=> "correct"
2.1.1 :002 > CouponCode.exists?(['code = ?', "#{code}"])
CouponCode Exists (0.2ms) SELECT 1 AS one FROM `coupon_codes` WHERE (code = 'T001') LIMIT 1
D, [2017-08-17T11:08:32.730761 #6788] DEBUG -- : CouponCode Exists (0.2ms) SELECT 1 AS one FROM `coupon_codes` WHERE (code = 'correct') LIMIT 1
=> true
2.1.1 :003 > code = 'wrong'
=> "wrong"
2.1.1 :004 > CouponCode.exists?(['code = ?', "#{code}"])
CouponCode Exists (0.2ms) SELECT 1 AS one FROM `coupon_codes` WHERE (code = 'wjorea') LIMIT 1
D, [2017-08-17T11:09:10.611964 #6788] DEBUG -- : CouponCode Exists (0.2ms) SELECT 1 AS one FROM `coupon_codes` WHERE (code = 'wrong') LIMIT 1
=> false
再一次,我确信这很简单,我只是想多了。抱歉,如果我提供了太多细节……我认为太多总比不够好。提前感谢您的任何帮助或指导!
我当前的代码基于 this Stack Overflow question 的部分内容,如果有帮助的话。
【问题讨论】:
-
请注意,在 ActiveRecord 中,大多数情况下您可以将
['x=?', x]替换为更简洁的{ x: x }。 -
很高兴知道!谢谢你,@tadman!
标签: mysql ruby-on-rails