以下是控制器中的更新操作。我在这里面临的问题是,如果agency_information私有方法中存在错误,则无法将错误添加到@ agency.errors中。我要防止@ agency.save动作是@ agency.errors中的错误并呈现json:{错误:@ agency.errors.full_messages},状态::unprocessable_entity。请帮我解决这个问题。
class AgenciesController < MyAccountController
def update
@agency_params = agency_params
@agency = current_agency
agency_information
render json: { errors: @agency.errors.full_messages }, status: :unprocessable_entity unless @agency.save
end
private
def agency_information
@agency = current_agency
gateway = ChargeIO::Gateway.new(secret_key: Settings.lawpay.secret_key)
card = gateway.create_card(token_id: params[:id])
if card.messages.empty?
@agency_params[:card][:number] = gateway_card.number
else
@agency.errors.full_messages << card.messages.collect(&:message).join("\n")
end
end
end
答案 0 :(得分:1)
如果要向模型添加错误,则应使用.errors.add(:base, message)
。如果错误是关于特定属性的,则:base
可以是您的任何模型属性;如果是关于模型的一般错误,则可以是:base
。
检查here以获得更多详细信息。
full_messages
只是吸气剂。向其中添加错误不会做任何事情。
请注意,如果您致电@agency.save
,将重新运行验证并清除现有错误。您需要将验证添加到模型级别,或者在调用.save
之前手动检查错误。
答案 1 :(得分:1)
您无法将错误添加到@agency
这样的模型对象中,如下所示
@agency.errors.full_messages << card.messages.collect(&:message).join("\n")
相反,请遵循
error_message = card.messages.collect(&:message).join("\n")
@agency.errors.add(:card, error_message)
答案 2 :(得分:0)
如果您想保存@agency,并且每当遇到错误时都想返回该错误,在这种情况下,您可以执行以下操作,
def update
@agency.save!
render json: {"result": {"data": {@agency}}
rescue StandardError => e
render json: {"error":
{"status":500,"message":@agency.errors.full_messages.merge}}, status: 500
end