Return 来自 rails 控制器中私有方法的错误
Return error from a private method in rails controller
下面是控制器中的更新动作。我在这里面临的问题是,如果 agency_information 私有方法中存在错误,我无法将错误添加到 @agency.errors 中。我想阻止 @agency.save 操作是在 @agency.errors 和渲染 json 中有错误:{ errors: @agency.errors.full_messages }, status : :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
如果要向模型添加错误,应使用 .errors.add(:base, message)
。如果错误与特定属性有关,则 :base
可以是您的任何模型属性;如果错误与一般模型有关,则 :base
可以是您的任何模型属性。
查看 here 了解更多详情。
full_messages
只是一个 getter。向那里添加错误没有任何作用。
请注意,如果您调用 @agency.save
,将重新运行验证并清除现有错误。您需要将该验证添加到模型级别或在调用 .save
.
之前手动检查错误
如果您想保存您的@agency 并且每当您遇到错误时您想要 return 那,在这种情况下您可以这样做,
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
使用以下代码将错误添加到模型对象将不起作用
@agency.errors.full_messages << card.messages.collect(&:message).join("\n")
改为执行以下操作
error_message = card.messages.collect(&:message).join("\n")
@agency.errors.add(:card, error_message)
下面是控制器中的更新动作。我在这里面临的问题是,如果 agency_information 私有方法中存在错误,我无法将错误添加到 @agency.errors 中。我想阻止 @agency.save 操作是在 @agency.errors 和渲染 json 中有错误:{ errors: @agency.errors.full_messages }, status : :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
如果要向模型添加错误,应使用 .errors.add(:base, message)
。如果错误与特定属性有关,则 :base
可以是您的任何模型属性;如果错误与一般模型有关,则 :base
可以是您的任何模型属性。
查看 here 了解更多详情。
full_messages
只是一个 getter。向那里添加错误没有任何作用。
请注意,如果您调用 @agency.save
,将重新运行验证并清除现有错误。您需要将该验证添加到模型级别或在调用 .save
.
如果您想保存您的@agency 并且每当您遇到错误时您想要 return 那,在这种情况下您可以这样做,
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
使用以下代码将错误添加到模型对象将不起作用
@agency.errors.full_messages << card.messages.collect(&:message).join("\n")
改为执行以下操作
error_message = card.messages.collect(&:message).join("\n")
@agency.errors.add(:card, error_message)