У меня есть форма заказа, в которой мои пользователи могут подтвердить условия продажи, чтобы перейти к оплате.
Если пользователь не установил флажок, я хочу, чтобы его предупредили об этом..
Мне просто не удается это сделать ...
Обновить (добавить корзину)
заказ инициализирован втележка для покупок:
class ShoppingCart
delegate :sub_total, to: :order
def initialize(token:)
@token = token
end
def order
@order ||= Order.find_or_initialize_by(token: @token, status: 0) do |order|
order.sub_total = 0
end
end
end
форма в orders / new.html.erb
<%= simple_form_for @order, url: clients_checkout_path do |f| %>
<div class="<%= 'error_message' if @order.errors.full_messages.any? %> ">
<% if @order.errors.any? %>
<% @order.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
<% end %>
</div>
<%= f.hidden_field :user_id %>
<%= f.input :cgos_accepted, as: :boolean, checked_value: true, unchecked_value: false %>
<%= f.submit, class: "btn btn-main btn-block" %>
<% end %>
вот контроллер:
class Clients::OrdersController < Clients::ApplicationController
def index
@orders = Order.all
@orders = @orders.filter_by_status(params[:status]) if params[:status]
end
def show
@order = Order.find(params[:id])
end
def new
@order = current_cart.order
@billing_address = BillingAddress.new
end
def create
@order = current_cart.order
@order.update_sub_total!
@order.update_total!
if @order.update_attributes!(order_params.merge(user_id: current_user.id))
redirect_to new_clients_order_payment_path(@order)
end
end
private
def order_params
params.require(:order).permit(:status, :user_id, :token , :sub_total, :cgos_accepted)
end
end
в модели моего заказа Iдобавил проверку:
class Order < ApplicationRecord
validate :accept_cgos, on: :update
#[...]
private
def accept_cgos
if self.cgos_accepted == false
errors.add(:base, :must_accept_cgos)
end
end
end
мой файл yml:
en:
activerecord:
errors:
models:
order:
attributes:
base:
must_accept_cgos: Please accept the general condition of sales
Я ожидал, что в div отобразится предупреждение, но оно открывает Better Error и говорит:
ActiveRecord::RecordInvalid at /clients/cart/checkout
Validation failed: Please accept the general condition of sales
Так что это вроде работает, но почему не отображается в моем сообщении об ошибке?