ruby-on-rails - proyecto - set postgresql rails



guardar los valores booleanos en la base de datos postgres usando ruby ​​on rails (1)

He estado trabajando en un viejo proyecto de rieles por un tiempo. Como no he trabajado con rieles en algún momento, estoy un poco oxidado y necesito ayuda en el camino.

El caso es que estoy agregando opciones de recogida a una web de comercio electrónico.

El back-end es manejado por active admin

Cuando el cliente está revisando su producto. Tiene la opción de recogerlo en la tienda o enviarlo.

Y quiero que la orden muestre en el back-end si el producto debe enviarse o si se recoge en la tienda.

Estoy como atrapado aquí, y las opciones de entrega no parecen estar guardando en la base de datos ... Sería tan agradable si alguien pudiera ayudarme con esto.

aquí está el html para la opción de recoger. está ubicado en 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> 

y aquí hay una parte del archivo 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

Y aquí está el 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

Y aquí está la 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

Entonces, ¿desea saber si el producto será recogido en la tienda o enviado por correo electrónico correctamente?

Ya que estás perdido, una solución más simple sería:

1 - Cambie el t.boolean "pick_up" a t.string "pick_up"

2 - use esta http://guides.rubyonrails.org/form_helpers.html#the-select-and-option-tags , para crear una lista con estas dos opciones.

3 - En su controlador guarde la opción que el usuario quiere.

Creo que para usar botones de opción, debes tener dos campos en tu base de datos. Algo como esto:

t.boolean "pick_up" t.boolean "sent_email"

si el usuario elige recoger, recibirá un parámetro con un valor verdadero para recoger, luego puede guardar en su base de datos. ¡Así que esta es otra opción también!

Espero eso ayude.





e-commerce