मैं अपने कैश_इन_ऑर्डर मॉडल के साथ स्ट्राइप त्रुटियों को संभालना चाहूंगा।

> CashInOrder.new
=> #<CashInOrder:0x000055e51bee03d0
 id: nil,
 deposit_id: nil,
 order_sum: nil,
 stripe_charge_id: nil,
 created_at: nil,
 updated_at: nil>

मैंने भुगतान कार्ड चुनने के लिए कैश_इन_ऑर्डर फ़ॉर्म सेलेक्ट_टैग संलग्न किया है

<%= form_with model: @cash_in_order, class: 'form', id: 'cash_in_order'  do |f| %>
    <%= render 'shared/error_messages', object: f.object %>
    <%= select_tag 'cash_in_order[order_source]', options_for_select(cards.collect{ |c| ["**** **** **** #{c.last4}", c.id] }, cards.first.id), class: "form-control" %>
    <br>
    <%= f.text_field :order_sum, class: "form-control", placeholder: "Amount" %>
    <br>
    <%= f.submit "add founds", class: "btn btn-default" %>
<% end %>

और Cash_in_order_params order_source विशेषता में जोड़ें

class CashInOrdersController < ApplicationController
    
    create
        @user = current_user
        @deposit = @user.deposit
        @cash_in_order = @deposit.cash_in_orders.build
        if current_user and current_user.deposit.id == @deposit.id
          @cash_in_order.save
        end
        respond_to do |format|
          if @cash_in_order.save
        format.html { redirect_to @deposit, notice: 'Founds were added to deposit!!' }
        format.json {head :no_content}
        format.js { flash.now[:notice] = "Founds were added to deposit!" }
          else
        format.html { redirect_to @deposit, notice: 'Founds were not added to deposit! Something was going wrong' }
        format.json { render json: @cash_in_order.errors.full_messages, status: :unprocessable_entity }
          end
        end
    end
    
    private
        def cash_in_order_params
          params.require(:cash_in_order).permit(:order_source, :order_sum)
        end
end

फॉर्म सबमिट करने के बाद मैं कंसोल में देखता हूं

Started POST "/cash_in_orders" for ::1 at 2020-09-29 07:46:11 -0400
Processing by CashInOrdersController#create as JS
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"Qgznx99ZUDwBG4R7moEE1gIP9o7FCpzbQh+FO8ccosrfMy5V7O5ydg/b6QvT7jZWUmQKtz+JDRO5rM4msDhzrw==", "cash_in_order"=>{"order_source"=>"card_1HSnL8KcFr6ZSgIRyUZUQrtE", "order_sum"=>""}, "commit"=>"add founds"}

Order_sum params मैंने स्ट्राइप (शून्य से अधिक) से त्रुटि प्राप्त करने के लिए खाली छोड़ दिया।

स्ट्राइप त्रुटियों को संभालने के लिए मैंने कैश_इन_ऑर्डर मॉडल में सत्यापनकर्ता बनाया

class CashInOrder < ApplicationRecord
validate :is_cashed_in

    private

    def is_cashed_in
            card = self.deposit.user.retrieve_card(self.order_source) #Here is my error!!!
            Stripe::Charge.create(:amount => (amount.to_f*100).to_i, :currency => 'usd', :source => card.id, :customer => self.deposit.user.stripe_customer_id)
    
            rescue Stripe::InvalidRequestError => e
                logger.error "Stripe error: #{e.message}"
                errors.add :base, "There was a problem with your credit card."
                false
    end

end

मुझे त्रुटि मिल रही है

CashInOrdersController#create में NoMethodError

#CashInOrder:0x00007f42f8f129e8 के लिए अपरिभाषित विधि `order_source'

निश्चित रूप से, मेरे मॉडल में ऑर्डर_सोर्स एट्रिब्यूट नहीं था, लेकिन मैंने इसे कैश_इन_ऑर्डर_परम्स में जोड़ा और मैं इसे अपने सर्वर के अनुरोध में देख सकता हूं

तो मेरा सवाल यह है कि मैं मॉडल सत्यापनकर्ता को इस ऑर्डर_सोर्स पैराम्स को सही तरीके से कैसे भेज सकता हूं?

किसी भी अग्रिम के लिए धन्यवाद!

0
anndrew78 29 सितंबर 2020, 15:30

1 उत्तर

सबसे बढ़िया उत्तर

attr_accessor का उपयोग करके देखें

class CashInOrder < ApplicationRecord
  attr_accessor :order_source
end
1
Salil 29 सितंबर 2020, 16:00