带find_by "ArgumentError Exception: Unknown key"



我有一个优惠券系统,我正在尝试使用方法获取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

相关内容

  • 没有找到相关文章

最新更新