我有一个优惠券系统,我正在尝试使用方法获取coupon
对象 find_by
:
Coupon.find_by_coupon(params[:coupon])
我收到此错误:
ArgumentError Exception: Unknown key: coupon
我确定params[:coupon]
是对的:
(rdb:1) eval params[:coupon]
{"coupon"=>"100"}
我有以下模型:
# Table name: coupons
#
# id :integer not null, primary key
# coupon :string(255)
# user_id :integer
更新:
如果我放Coupon.find_by_coupon(params[:coupon][:coupon])
而不是Coupon.find_by_coupon(params[:coupon])
,它就可以工作.
以下是我视图中带有表单的代码:
<%= semantic_form_for Coupon.new, url: payment_summary_table_offers_path(@booking_request) do |f| %>
<%= f.input :coupon, :as => :string, :label => false, no_wrapper: true %>
<%= f.action :submit, :as => :button, :label => t(:button_use_coupon), no_wrapper: true,
button_html: { value: :reply, :disable_with => t(:text_please_wait) } %>
<% end %>
如果你使用的是 Rails 3,我建议你使用这种方法查找对象:
# equivalent of find_all
Coupon.where(:coupon => params[:coupon]) # => Returns an array of Coupons
# equivalent of find :first
Coupon.where(:coupon => params[:coupon]).first # => Returns a Coupon or nil
尝试做一个params.inspect
,看看你的哈希是如何制作的。我认为它是这样构建的:
{ :coupon => { :coupon => '100' } }
如果是,您应该使用 params[:coupon][:coupon]
来获取字符串 '100'
更新后:
semantic_form_for
正在为您创建表单,当您给他一个Coupon.new
它将以这种方式构建参数:
params = {
:coupon => { :attribute_1 => 'value_1', :attribute_2 => 'value_2' }
}
如果您更喜欢使用 find_by 方法:
Coupon.find_by_coupon(params[:coupon][:coupon]) # => Returns a Coupon or raise a RecordNotFound error
或者使用 where 方法:
Coupon.where(:coupon => params[:coupon][:coupon]).first # => Returns a Coupon or nil