1

私はクーポンシステムを持っています、そして私は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 %>
4

1 に答える 1

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 = {
  :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
于 2012-11-22T16:15:09.087 に答える