gpt4 book ai didi

ruby-on-rails - 在 Ruby 中返回 true 或错误消息

转载 作者:数据小太阳 更新时间:2023-10-29 06:39:04 26 4
gpt4 key购买 nike

我想知道编写这样的函数是好的还是坏的形式。

def test(x)
if x == 1
return true
else
return "Error: x is not equal to one."
end
end

然后为了使用它,我们做这样的事情:

result = test(1)

if result != true
puts result
end

result = test(2)

if result != true
puts result
end

它只显示第二次调用测试的错误消息。

我正在考虑这样做,因为在一个 Rails 项目中,我在我的 Controller 代码中工作,我调用模型的实例方法,如果出现问题,我希望模型将错误消息返回给 Controller 和 Controller 获取该错误消息并将其放入闪存并重定向。有点像这样

def create
@item = Item.new(params[:item])

if !@item.nil?
result = @item.save_image(params[:attachment][:file])

if result != true
flash[:notice] = result

redirect_to(new_item_url) and return
end

#and so on...

这样我就不会在 Controller 中构建错误消息,而只是传递它们,因为我真的不希望 Controller 只关心 save_image 方法本身的工作是否有效。

这对我来说很有意义,但我很好奇这是否被认为是一种好的或坏的编写方法的方式。请记住,我是在最一般意义上问这个主要与 ruby​​ 有关的问题,只是碰巧我在 Rails 项目中这样做, Controller 的实际逻辑真的不是我关心的问题。

最佳答案

我会说在不同情况下返回不同类型(例如 bool 值、字符串或数字)的方法是一种不好的做法。

如果您有某种测试方法想要返回测试未通过原因的详细信息,那么您可以返回一对值(数组),如下所示:

def test(x)
if x == 1
return true, "x is fine"
else
return false, "Error: x is not equal to one."
end
end

然后将您的 Controller 代码部分写为:

valid, message = @item.save_image(params[:attachment][:file])

if !valid
flash[:notice] = message
redirect_to(new_item_url) and return
end

如果您谈论的是大多数情况下会成功但可能会失败的save_image 方法,并且您想要指出此失败及其原因,那么我会使用exceptions。例如

def save_image(file)
raise "No file was specified for saving" if file.nil?
# carry on trying to save image
end

然后你的 Controller 代码应该是这样的:

begin
result = @item.save_image(params[:attachment][:file])
rescue Exception => ex
flash[:notice] = ex.message
redirect_to(new_item_url) and return
end

关于ruby-on-rails - 在 Ruby 中返回 true 或错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2793495/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com