微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 ruby​​ on rails 中为我的购物车总价添加额外的运费?

如何解决如何在 ruby​​ on rails 中为我的购物车总价添加额外的运费?

显然我页面上的所有内容都“很好”,但我想进行以下修改,希望您能帮助我?。 我希望用户选择我低于 1 的表格检查的全国运输选项,将 +150 添加到购物车的总价,当他们选择仅个人交付 CDMX 时 只显示产品的总价。我曾想过甚至尝试过 if 但不知道如何实现它。

这是我的应用/模型中的shopping_cart.rb 类

class ShoppingCart < ApplicationRecord
    has_many :in_shopping_carts
    has_many :products,through: :in_shopping_carts
    enum status: {payed: 1,default: 0}

    
    def total
        products.sum(:pricing)
    end
    
end

这是我从 app/views/shopping_carts 获取的 show.haml 类

%h1.mb-3.text-align:center.text-center Mi carrito
.form-check
    %p Selecciona tu tipo de envio:
    %input#exampleRadios1.form-check-input{checked: "checked",name: "exampleRadios",type: "radio",value: "option1"}/
    %label.form-check-label{for: "exampleRadios1"}
    Entrega personal solo CDMX
.form-check
    %input#exampleRadios2.form-check-input{name: "exampleRadios",value: "option2"}/
    %label.form-check-label{for: "exampleRadios2"}
    Envio nacional

.card.large-padding 
    %table.table.table-striped.table-hover.small#table_shopping_cart
        %thead
            %td Producto
            %td Costo
            %td Acciones
        %tbody
            -@shopping_cart.in_shopping_carts.each do |i_sh|
                -product = i_sh.product
                %tr{id: "#{product.id}"}
                    %td= product.name
                    %td= product.pricing
                    %td= link_to "Eliminar",i_sh,method: :delete
    .top-space.large-padding.text-center#payment_form
        %p.medium
            %strong
                Total: $
                =@shopping_cart.total

这是我的应用/控制器的shopping_carts_controller.rb类

class ShoppingCartsController < ApplicationController
    def show
        if @shopping_cart.payed?
            render "shopping_carts/complete"
            return
        end
    end
end
            

解决方法

您需要告诉控制器已选择任一选项。

执行此操作的基本方法是让用户在选择无线电以提交给控制器方法后按下按钮。此控制器方法会告诉您的购物车是“全国配送”还是“个人自提”类型。

大致如下:

# view
form_tag change_delivery_method_path(@shopping_cart)
  label
    Personal
    radio_button_tag "delivery_method","personal"
  label
    National
    radio_button_tag "delivery_method","national"
  submit_button_tag

# controller
def change_delivery_method
  shopping_cart = ShoppingCart.find(params[:shopping_cart_id])
  shopping_cart.update(delivery_method: params[:delivery_method])
end

从那里,您可以相应地修改总数。

class ShoppingCart < ApplicationRecord
    has_many :in_shopping_carts
    has_many :products,through: :in_shopping_carts
    enum status: {payed: 1,default: 0}
    enum delivery_method: { personal: 0,national: 1 }
    
    def total
        products.sum(:pricing) + delivery_fee
    end

    def delivery_fee
        return 150 if national?
        return 0 if personal?
    end
end

下一级别是将表单提交转换为 AJAX。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。