我在视图中有一个带有输入框的表单。如果您填写输入框并按"保存",则执行系统命令并将值保留到数据库。
我检查命令是否已成功执行,然后,如果该值已更新到数据库。我不做的就是在某种交易中运行这些交易"所以更改已完成如果"system_command == true"
和.update == true
。
嵌套条件可能是错误的,因为如果.update
失败,系统命令已经执行,无法撤消。
def update
if system_command # Checks If command was executed successfully
respond_to do |format|
if @system_command.update(system_command_params)
format.html { redirect_to system_commands_path, notice: 'Success' }
else
format.html { render :index }
end
end
else
redirect_to system_commands_path, notice: 'Failed'
end
end
system_command 是执行系统命令的方法。
我怎么能100%确定这种方法的完整性?
答案 0 :(得分:2)
您可以在保存之前验证您的记录:
@system_command.assign_attributes(system_command_params) # Assign params, but don't save.
# `system_command` will only be run if the @system_command passes Rails validations.
if @system_command.valid? && system_command
@system_command.save
# ...
end
请注意,调用valid?
答案 1 :(得分:0)
我相信这个解决方案有效但我还不能测试它。
def update
ActiveRecord::Base.transaction do
@system_command.update(system_command_params) # Update the db
begin
system_command # Run the command
redirect_to system_commands_path, notice: 'Success'
rescue # If the command fails
raise ActiveRecord::Rollback
redirect_to system_settings_path, notice: 'Fail'
end
end
end