如何使用Rails实例public方法执行?在 if-else 中
How to use Rails instance public method performed? in if-else
如何使用Ruby on Rails方法执行?在 if else 语句中?
我尝试在下面的示例中使用这个 Whosebug anwser:
if condition
does something
elsif redirect_to(records_path)
performed?
does another thing
else
yet another thing
end
但这只是重定向而不检查是否执行。
我希望它检查是否执行了到 records_path 的重定向以及何时执行某些操作(或在我的示例中为 "does another thing")
我也试过这个:
elseif records_path.performed?
还有这个:
elseif redirect_to(records_path) performed?()
以及介于两者之间的所有事情。
谁能解释一下它是如何完成的以及我如何从 docs 得到它?
这意味着您的控制器操作 (A) 能够调用其他控制器方法 (M),然后仅当 (M) 的 none 执行了 render/redirect.
阅读源代码,非常简单明了:https://apidock.com/rails/ActionController/Metal/performed%3F
例如:
class ArticlesController < ApplicationController
def show
check_identity
render :show unless performed?
end
def check_identity
redirect_to root_path, notice: "You're not allowed to be here" unless user_signed_in?
end
end
performed?
只是测试渲染或重定向是否已经发生。这不会检查发送给用户的视图。该检查仅 "you define path yourself or it must be done automatically".
尝试这样的事情:
if condition
does something
redirect_to(records_path)
end
if performed?
does another thing
else
yet another thing
end
在控制器操作中,当我们键入 render
或 redirect_to
时,它们不会立即执行,但它们会排队并在方法完成后执行。所以这允许在控制器操作中有双重渲染或 redirect_to,这将产生一个错误(因为 rails 不知道要执行哪个)。所以这就是为什么在 rails 中他们添加了一个方法 performed?
,它将指示 render
或 redirect_to
是否已经被调用(排队)。
在大多数情况下,这并不是真正需要的,因为通常您的控制器代码非常简单。
澄清一下:performed?
并没有实际测试 redirect_to
已经完成,它只是测试渲染或重定向到 called/queued。此外,redirect_to
不是 return 指示是否已完成的布尔值。
所以你的代码应该是这样的:
if condition
does something
else
redirect_to(records_path)
end
if performed?
# the redirect-to was executed
does another thing # but not a render or redirect
else
yet another thing
# and could be a render or redirect
# if not the normal view will be rendered
end
请注意,在这个简单的示例中,performed?
只是 condition
的负数,因此您可以轻松地将它们压缩在一起。
如何使用Ruby on Rails方法执行?在 if else 语句中?
我尝试在下面的示例中使用这个 Whosebug anwser:
if condition
does something
elsif redirect_to(records_path)
performed?
does another thing
else
yet another thing
end
但这只是重定向而不检查是否执行。
我希望它检查是否执行了到 records_path 的重定向以及何时执行某些操作(或在我的示例中为 "does another thing")
我也试过这个:
elseif records_path.performed?
还有这个:
elseif redirect_to(records_path) performed?()
以及介于两者之间的所有事情。
谁能解释一下它是如何完成的以及我如何从 docs 得到它?
这意味着您的控制器操作 (A) 能够调用其他控制器方法 (M),然后仅当 (M) 的 none 执行了 render/redirect.
阅读源代码,非常简单明了:https://apidock.com/rails/ActionController/Metal/performed%3F
例如:
class ArticlesController < ApplicationController
def show
check_identity
render :show unless performed?
end
def check_identity
redirect_to root_path, notice: "You're not allowed to be here" unless user_signed_in?
end
end
performed?
只是测试渲染或重定向是否已经发生。这不会检查发送给用户的视图。该检查仅 "you define path yourself or it must be done automatically".
尝试这样的事情:
if condition
does something
redirect_to(records_path)
end
if performed?
does another thing
else
yet another thing
end
在控制器操作中,当我们键入 render
或 redirect_to
时,它们不会立即执行,但它们会排队并在方法完成后执行。所以这允许在控制器操作中有双重渲染或 redirect_to,这将产生一个错误(因为 rails 不知道要执行哪个)。所以这就是为什么在 rails 中他们添加了一个方法 performed?
,它将指示 render
或 redirect_to
是否已经被调用(排队)。
在大多数情况下,这并不是真正需要的,因为通常您的控制器代码非常简单。
澄清一下:performed?
并没有实际测试 redirect_to
已经完成,它只是测试渲染或重定向到 called/queued。此外,redirect_to
不是 return 指示是否已完成的布尔值。
所以你的代码应该是这样的:
if condition
does something
else
redirect_to(records_path)
end
if performed?
# the redirect-to was executed
does another thing # but not a render or redirect
else
yet another thing
# and could be a render or redirect
# if not the normal view will be rendered
end
请注意,在这个简单的示例中,performed?
只是 condition
的负数,因此您可以轻松地将它们压缩在一起。