2017-08-02 13 views
7

मैं थोड़ी देर के लिए पुरानी रेल परियोजना पर काम कर रहा हूं। चूंकि मैंने कुछ समय में रेल के साथ काम नहीं किया है, इसलिए मैं थोड़ी सी जंगली हूं और रास्ते में कुछ मदद की ज़रूरत है।रेलवे पर रूबी का उपयोग कर डेटाबेस पोस्ट करने के लिए बूलियन मानों को सहेजना

बात यह है कि मैं ई वाणिज्य वेब पर एक पिकअप विकल्प जोड़ रहा हूं।

बैकएंड जब ग्राहक अपने उत्पाद बाहर की जाँच कर रहा है active admin

से प्रेरित है। उसे स्टोर में इसे लेने या इसे भेजने का विकल्प मिलता है।

और मैं बैकएंड में दिखाना चाहता हूं कि उत्पाद भेजा जाना चाहिए या दुकान में उठाया गया है या नहीं।

मैं यहां फंस गया हूं, और डिलीवरी विकल्प डेटाबेस में सहेजने लगते नहीं हैं .... अगर कोई मेरी मदद कर सकता है तो यह बहुत अच्छा होगा।

यहां पिकअप विकल्प के लिए एचटीएमएल है। यह views/orders/_form.html.erb

<div class="col-md-5 pick-up-buttons" id="country_div"> 
    <li> 
    <%= f.radio_button :pick_up, "1", checked: false, data: { question: "Pick up your items in the store" } %> 
    <%= f.label :pick_up, "Pick up your items in the store" %> 
    </li> 
    <li> 
    <%= f.radio_button :pick_up, "0", checked: true, data: { question: "Send the items by mail" } %> 
    <%= f.label :pick_up, "Send the items by mail" %> 
    </li> 
</div> 

में स्थित है और यहां schema.rb फ़ाइल

create_table "orders", force: :cascade do |t| 
    t.string "name" 
    t.string "email" 
    t.text  "address" 
    t.string "city" 
    t.string "country" 
    t.datetime "created_at",     null: false 
    t.datetime "updated_at",     null: false 
    t.boolean "shipped", default: false 
    t.boolean "pick_up", default: false 
    t.string "delivery" 
end 

और यहाँ का एक हिस्सा है यहाँ orders_controller.rb

class OrdersController < ApplicationController 
    include CurrentCart 
    before_action :set_cart, only: [:new, :create] 
    before_action :set_order, only: [:show, :edit, :destroy] 

    def index 
    @orders = Order.all? 
    end 

    def new 
    @images = ["1.jpg", "2.jpg", "3.jpg", "4.jpg", "5.jpg"] 
    @random_no = rand(5) 
    @random_image = @images[@random_no] 

    if @cart.product_items.empty? 
     redirect_to root_url, notice: 'Your Cart is Empty' 
     return 
    end 

    @order = Order.new 
    @client_token = Braintree::ClientToken.generate 

    @del_cost_euro = 20 
    end 

    def create 
    @order = Order.new(order_params) 
    if @order.save 
     charge 
     if @result.success? 
     @order.add_product_items_from_cart(@cart) 
     Cart.destroy(session[:cart_id]) 
     session[:cart_id] = nil 
     OrderNotifier.received(@order).deliver 
     redirect_to root_url, notice: 'Thank You for Your Order' 
     else 
     flash[:error] = 'Please Check Your Cart' 
     redirect_to root_url, alert: @result.message 
     @order.destroy 
     end 
    else 
     @client_token = Braintree::ClientToken.generate 
     render :new 
    end 
    end 

    def show 
    end 

    def destroy 
    @order.destroy 
    redirect_to root_url, notice: 'Order deleted' 
    end 

    private 
    def set_order 
    @order = Order.find(params[:id]) 
    end 

    def order_params 
    params.require(:order).permit(:name, :email, :address, :city, :country, :pick_up, :delivery) 
    end 

    def charge 
    @result = Braintree::Transaction.sale(
     amount: @cart.total_price_usd, 
     payment_method_nonce: params[:payment_method_nonce]) 
    end 
end 

है और app/admin/order.rb

ActiveAdmin.register Order do 

permit_params :shipped 

after_update do |order| 
    OrderNotifier.shipped(@order).deliver if order.shipped 
end 

show do |order| 
    panel 'Customer Details' do 
    attributes_table_for order, :name, :email, :address, :city, :country 
    end 

    panel 'Created' do 
    "#{time_ago_in_words order.created_at} ago" 
    end 

    panel 'Shipped' do 
    order.shipped 
    end 

    panel 'delivery' do 
    order.pick_up 
    end 

    panel 'Order Details' do 
    table_for(order.product_items) do 
     column 'Product' do |item| 
     item.product.title 
     end 

     column 'Quantity' do |item| 
     item.quantity 
     end 

     column 'Price Euro' do |item| 
     number_to_currency item.total_price_eur 
     end 

     column 'Price USD' do |item| 
     number_to_currency item.total_price_usd 
     end 
    end 
    end 

    panel 'Order Total USD' do 
    number_to_currency order.total_price_usd 
    end 

    panel 'Order Total Euro' do 
    number_to_currency order.total_price_eur 
    end 
end 
है
+0

क्या आपने radio_button_Tag का उपयोग करने का प्रयास किया है? https://apidock.com/rails/ActionView/Helpers/FormTagHelper/radio_button_tag –

+0

एक और बात, क्या आपको लगता है कि इस कार्यक्षमता के लिए एक रेडियो बटन सही है? एक चुनिंदा ड्रॉपडाउन बेहतर नहीं होगा? –

+0

हाय @ गैब्रियल मेस्क्विटा नहीं मैंने 'radio_button_Tag' का उपयोग नहीं किया है ... मुझे यकीन नहीं है कि इस कार्यक्षमता के लिए क्या सही है, शायद चुनिंदा ड्रॉपडाउन बेहतर होगा।मैं इस सब में खो गया हूं :) क्या आप पोस्ट कर सकते हैं कि आप यह कैसे करेंगे ?? – codegirl

उत्तर

2

तो आप जानना चाहते हैं कि क्या स्टोर स्टोर पर उठाया जा रहा है या ईमेल द्वारा सही भेजा गया है?

जब से तुम खो रहे हैं, एक सरल समाधान होगा:

1 - "pick_up"

2 t.string को t.boolean "pick_up" बदलें - इस http://guides.rubyonrails.org/form_helpers.html#the-select-and-option-tags उपयोग करते हैं, एक सूची बनाने के लिए इन दो विकल्पों के साथ।

3 - आपके नियंत्रक में उपयोगकर्ता चाहता है कि विकल्प को बचाओ।

मुझे लगता है कि रेडियो बटन का उपयोग करने के लिए, आपके पास अपने डेटाबेस में दो फ़ील्ड होना चाहिए। कुछ इस तरह:

t.boolean "pick_up" t.boolean यदि उपयोगकर्ता को लेने के लिए चुनें "sent_email"

, तुम्हें लेने के लिए एक सही मूल्य के साथ एक परम प्राप्त होगा, तो आप को बचा सकता है आप डेटाबेस पर तो यह भी एक और विकल्प है!

उम्मीद है कि यह मदद करता है।

+1

धन्यवाद @ गैब्रियल मेस्क्विटा, मुझे यकीन नहीं है कि मुझे 't.boolean' को स्ट्रिंग में क्यों बदलना चाहिए क्योंकि बूलियन या तो सत्य या गलत है। डेटाबेस या तो सत्य = भेजा उत्पाद या झूठा = उठाओ उत्पादों को देखेंगे। – codegirl

+1

@codegirl एक बूलियन प्रकार है, जैसा कि आपने कहा, सच या गलत (या शून्य लेकिन इसे आपके कोड/डीबी द्वारा संभाला जाना चाहिए)। क्या होगा अगर कल आपका बॉस चाहता है कि आप एक और प्रकार की डिलीवरी जोड़ दें, तो 'कबूतर' कहें? आपको इस बुलियन कॉलम को स्ट्रिंग प्रकार में कनवर्ट करना होगा और मौजूदा डेटा के आधार पर मौजूदा डेटा अपडेट करना होगा। देखें कि मैं कहां जा रहा हूं? आप वर्तमान में एक ऐसी सुविधा को कार्यान्वित कर रहे हैं जो संभावित रूप से कुछ बड़ा हो सकता है, अभी एक लचीला कोड/डीबी संरचना तैयार करने का प्रयास करें ताकि यदि वह घटना आती है तो आपको बहुत सारे प्रयास नहीं करना पड़ेगा। – MrYoshiji

+0

@MrYoshiji की तरह कहा, स्ट्रिंग अधिक लचीला है और मुझे लगता है कि यह आपकी समस्या हल करता है। अगर उत्तर मदद मिली, तो कृपया एक उथल-पुथल दें :) –

संबंधित मुद्दे