Ruby on rails 将Rails控制器内容保存到单独的配置文件中

Ruby on rails 将Rails控制器内容保存到单独的配置文件中,ruby-on-rails,controllers,Ruby On Rails,Controllers,有人知道将控制器项分离到单独文件的好方法吗?我的控制器中有以下内容 def admin? session[:password] == "password" end 但是我想将“密码”分离到一个单独的文件中,这样我就可以从公共git回购中忽略它了 有没有一个简单的方法可以做到这一点?不将密码存储在数据库中?尽管在会话中存储密码并以这种方式使用密码是一种不好的做法。但是,如果您有特定的理由这样做,那么您可以将其存储在配置目录下或任何地方的yml文件中。我在config目录下给出了一个示例:

有人知道将控制器项分离到单独文件的好方法吗?我的控制器中有以下内容

def admin?
    session[:password] == "password"
end
但是我想将“密码”分离到一个单独的文件中,这样我就可以从公共git回购中忽略它了


有没有一个简单的方法可以做到这一点?不将密码存储在数据库中?

尽管在会话中存储密码并以这种方式使用密码是一种不好的做法。但是,如果您有特定的理由这样做,那么您可以将其存储在配置目录下或任何地方的yml文件中。我在config目录下给出了一个示例:

#config/password.yml
password: MyPassword
在您的/config/passwords.yml中

password: your_password_text_here_without_quotes
然后在控制器/模型/任意位置加载文件并获取密码

password = YAML.load_file("#{Rails.root}/config/passwords.yml")["password"]

您可以使用全局常量来处理这些设置。 例如,在配置目录中定义一个yml文件:

#config/password.yml
password: MyPassword
使用初始值设定项在系统启动时加载设置。比如:

#config/initializers/load_password.rb
conf_file = File.join(Rails.root, 'config', 'password.yml')
MY_CONFIG = OpenStruct.new YAML.load_file(conf_file)
在整个项目中,通过以下方式访问此功能:

MY_CONFIG.password
但是,您不应该使用这种方法以这种方式处理密码。
要获得简单的身份验证,可以尝试使用
ENV
变量。首先将环境变量设置为一个值

导出MYAPPPASSWORD=1234

然后在初始值设定项中使用它

# config/initializers/my_app_password.rb
ENV['MYAPPPASSWORD'] = `printf "%s" $MYAPPPASSWORD`

然后你可以直接调用ENV['MYAPPPASSWORD']

我没有太多时间来深入解释你为什么做错了,但你的方法似乎完全错了。首先,应该将
admin?
绑定到一个模型,这样你就可以执行
user.admin?
而不是检查会话,然后密码就不应该存储在会话中,最后,你不应该在文件中硬编码密码。你应该读到:谢谢@pjam,我想我会考虑实现一个用户模型。谢谢这是有用的,在阅读了其他一些评论之后,我想我将实现一个用户模型。