gpt4 book ai didi

ruby-on-rails - 将类和方法调用传递给要在 Ruby 中使用的方法

转载 作者:太空宇宙 更新时间:2023-11-03 18:18:37 25 4
gpt4 key购买 nike

我在 Rails 应用程序中遇到了这样一种情况,我将多次使用类似类型的代码,所以我认为我应该尝试将其擦干。我是 Ruby & Rails 的新手,我敢打赌,我已经可以使用某种解决方案了——所以我很感激,但是,我也想帮助理解如何最好地去关于这个。

我觉得我的解决方案即使可能也很糟糕——但我实际上并不知道,所以我认为最好寻求帮助。

以下是我希望重复的代码的两个示例:

def index
if current_user && current_user.admin?
@users = User.all
else
redirect_to root_url, :notice => "Access Unauthorized"
end
end

另一个例子:

def new
if current_user && current_user.admin?
@podcast = ApPodcast.new
else
redirect_to root_url, :notice => "Access Unauthorized"
end
end

我使用这个条件来确保只有管理员用户可以访问某些页面。除非我能找到更好的解决方案,否则我希望经常使用这种类型的验证。

但是,我的想法是在 ApplicationController 中创建一个辅助方法,它采用实例变量的名称、类的名称以及要在该类上调用的方法,类似于以下内容:

def admin_auth(instVar, class_to_use, method_call)
if current_user && current_user.admin?
instVar = class_to_use.method_call
else
redirect_to root_url, :notice => "Access Unauthorized"
end
end

这是否合理、有效甚至可能?有没有更好的方法来解决这个问题?我已经尝试了上面的代码并且基本上得到错误告诉我“method_call”不存在所以我假设我打电话时:

admin_auth(@user, User, all)

我根本没有做对。

再次强调,任何帮助我保持代码干燥的解决方案都将不胜感激,就像我读过的每个教程所推荐的那样——但比这更好的是理解任何更好的解决方案。

谢谢。

最佳答案

要动态调用类的方法,需要使用send

def admin_auth(instVar, class_to_use, method_call)
if current_user && current_user.admin?
return class_to_use.send(method_call)
else
redirect_to root_url, :notice => "Access Unauthorized"
end
end

您需要将类名作为常量传递,将方法名作为字符串或符号传递

> @user = admin_auth(User, :all)
> @user = admin_auth(User, 'all')

关于ruby-on-rails - 将类和方法调用传递给要在 Ruby 中使用的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22123755/

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