我有优惠券系统,我正在尝试使用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 %>
答案 0 :(得分:2)
如果您使用的是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:
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