OK, to nie ma sensu. Mogę dodać błąd do modelu, ale kiedy wywołuję poprawny? lub zapisać! usuwa błąd, który dodałem. Jednak regularne sprawdzanie poprawności uniemożliwi zapisanie modelu. Dlaczego nie działa błąd.add?Dodawanie błędów do modelu w szynach nie działa
1.9.3p0 :001 > @order = Order.new(email: '[email protected]')
=> #<Order id: nil, name: nil, address: nil, email: "[email protected]", pay_type: nil, created_at: nil, updated_at: nil, paypal_customer_token: nil, paypal_recurring_profile_token: nil, first_name: nil, last_name: nil, account_details: {}, unit_id_for_plan: nil, invoice: nil, purchased_at: nil>
1.9.3p0 :002 > @order.valid?
=> true
1.9.3p0 :003 > @order.errors.add :base, 'error'
=> ["error"]
1.9.3p0 :004 > @order.errors.size
=> 1
1.9.3p0 :005 > @order.valid?
=> true
1.9.3p0 :006 > @order.errors.size
=> 0
1.9.3p0 :007 > @order.errors.add :base, 'error_again'
=> ["error_again"]
1.9.3p0 :008 > @order.errors.size
=> 1
1.9.3p0 :009 > @order.save!
(0.1ms) BEGIN
SQL (0.3ms) INSERT INTO `orders` (`account_details`, `address`, `created_at`, `email`, `first_name`, `invoice`, `last_name`, `name`, `pay_type`, `paypal_customer_token`, `paypal_recurring_profile_token`, `purchased_at`, `unit_id_for_plan`, `updated_at`) VALUES ('--- {}\n', NULL, '2013-05-23 18:17:18', '[email protected]', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2013-05-23 18:17:18')
(12.6ms) COMMIT
=> true
1.9.3p0 :010 > @order.errors.size
=> 0
Model Zamówienie nie zawiera dużo Walidacja:
attr_accessible :address, :email, :name, :pay_type, :paypal_customer_token, :paypal_payment_token, :first_name, :last_name, :account_details, :invoice
has_one :cart
has_many :line_items, :through => :cart
has_many :products, :through => :line_items, :source => :sellable, :source_type => 'Product'
has_many :airtime_plans, :through => :line_items, :source => :sellable, :source_type => 'AirtimePlan'
has_many :payment_notifications
serialize :account_details, Hash
validates_presence_of :email
validates_presence_of: email poprawnie uniemożliwi Zapisz z pracy, ale kiedy używam errors.add: podstawa, to nie działa .
@LeoCorrea odpowiedź doprowadziła mnie do wystąpienia z tego rozwiązania:
validate :user_validation, :on => :create
attr_accessor :users_invalid
def user_validation
if users_invalid
errors[:base] << "You have invalid user records"
end
end
#paypal_payment model in which the order is passed into
elsif resp["status"] == "error"
#@order.errors.add(:base, resp["body"])
@order.users_invalid = true
end
Problem jest rzeczywisty komunikat chcę jest w odp [ „ciała”]. Właśnie dodałem nieprzydatny komunikat "Masz niepoprawne rekordy użytkownika".
musimy swój pełny 'metody save_with_payment' myślę – Ven
@ user1737909 dodałem metody pełnej – JohnMerlino
i twoi weryfikatorów ... Jedno zauważyłem jednak, w swoich metodach używasz' zaoszczędzić! ', Która zgłasza wyjątek przy błędzie, zamiast 'save', który zwraca true/false. Ale myślę, że to jest drugorzędne, najpierw sprawdziłbym twoje walidacje. – dpassage