Итак, у меня есть пользовательская форма form_for
, которая принимает вложенные атрибуты из account_prices. То, что происходит на моем контроллере пользователя, у меня есть этот закрытый метод.
def pre_build_user_account_prices
if @user.account_prices.empty?
@accountable_default = @user.account_prices.build(status: 'default')
@accountable_temporary = @user.account_prices.build(status: 'temporary')
else
@accountable_default = @user.account_prices.where(status: 'default')
@accountable_temporary = @user.account_prices.where(status: 'temporary')
end
end
причина условия заключается в том, что если я не выполню проверку здесь, то будет выполнено 2 формы. пустая форма и с формой данных. Поэтому проверка здесь необходима
, но моя проблема заключается в следующем. Я нахожусь на пути редактирования, и когда я пытаюсь отправить неверную форму, она отображает несколько пустых форм. вот изображение.
Если я продолжу отправлять неверную форму, она будет отображаться несколько раз. Я думал, если проверю через JS, если есть многократный ребенок, я удалю это. это лучший подход?
вот мои ассоциации
Class User
has_many :account_prices, as: :accountable, autosave: true
accepts_nested_attributes_for :account_prices
end
полиморфный
class AccountPrice
enum status: {default: 'default', temporary: 'temporary'}
validates :accountable, presence: true
validates :status, presence: true
validates :exp_start_date, presence: true, if: :is_temporary_status?
validates :exp_end_date, presence: true, if: :is_temporary_status?
belongs_to :accountable, polymorphic: true
belongs_to :variant_price_set, class_name: "Spree::VariantPriceSet"
belongs_to :shipping_method_price_set, class_name: "Spree::ShippingMethodPriceSet"
def is_temporary_status?
status == 'temporary'
end
end
пользовательский контроллер
Class UsersController
before_action :pre_build_user_account_prices, only: :edit
def update
if @user.update_attributes(user_params)
flash.now[:success] = Spree.t(:account_updated)
redirect_to show_admin_user_path(@user)
else
render :edit
end
end
def pre_build_user_account_prices
if @user.account_prices.empty?
@accountable_default = @user.account_prices.build(status: 'default')
@accountable_temporary = @user.account_prices.build(status: 'temporary')
else
@accountable_default = @user.account_prices.where(status: 'default')
@accountable_temporary = @user.account_prices.where(status: 'temporary')
end
end
end