gpt4 book ai didi

ruby-on-rails - 验证是否存在送货地址,除非它与账单地址相同

转载 作者:行者123 更新时间:2023-11-28 21:32:08 25 4
gpt4 key购买 nike

我的 Order 类中有这个。我想验证 shipping_address 是否存在,除非它与 billing_address 相同。然而,我的规范总是失败。

class Order < ActiveRecord::Base
attr_writer :ship_to_billing_address

belongs_to :billing_address, class_name: 'Address'
belongs_to :shipping_address, class_name: 'Address'

accepts_nested_attributes_for :billing_address, :shipping_address

validates :shipping_address, presence: true, unless: -> { self.ship_to_billing_address? }

def ship_to_billing_address
@ship_to_billing_address ||= true
end

def ship_to_billing_address?
self.ship_to_billing_address
end
end

但我不断收到失败的规范(预期示例无效):

describe "shipping_address_id" do
context "when shipping address is different from billing address" do
before { @order.ship_to_billing_address = false }
it_behaves_like 'a foreign key', :shipping_address_id
end
end

shared_examples 'a foreign key' do |key|
it "can't be nil, blank, or not an int" do
[nil, "", " ", "a", 1.1].each do |value|
@order.send("#{key}=", value)
@order.should_not be_valid
end
end
end

表单代码:

= f.check_box :ship_to_billing_address
| Use my shipping address as my billing address.

最佳答案

您的ship_to_billing_address 方法实现是错误的。它将 @ship_to_billing_address 设置为 true,即使之前设置为 false。这是更正确的实现:

   def ship_to_billing_address
@ship_to_billing_address = true if @ship_to_billing_address.nil?
@ship_to_billing_address
end

例子:

irb(main):001:0> class Order
irb(main):002:1> attr_writer :stba
irb(main):003:1> def stba
irb(main):004:2> @stba ||= true
irb(main):005:2> end
irb(main):006:1> end
=> nil
irb(main):007:0>
irb(main):008:0* o = Order.new
=> #<Order:0x8bbc24c>
irb(main):009:0> o.stba = false
=> false
irb(main):010:0> o.stba


irb(main):011:0> class Order2
irb(main):012:1> attr_writer :stba
irb(main):013:1> def stba
irb(main):014:2> if @stba.nil?
irb(main):015:3> @stba = true
irb(main):016:3> else
irb(main):017:3* @stba
irb(main):018:3> end
irb(main):019:2> end
irb(main):020:1> end
=> nil
irb(main):021:0> o = Order2.new
=> #<Order2:0x8b737e0>
irb(main):022:0> o.stba = false
=> false
irb(main):023:0> o.stba
=> false

关于ruby-on-rails - 验证是否存在送货地址,除非它与账单地址相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16448564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com