ruby-on-rails - Rails 访问模型中的 session 数据

标签 ruby-on-rails ruby

我的数据库包含多个的数据(每个表都有一个列)。每当用户登录时,他们都必须选择要使用的年份。

登录后,用户访问的所有数据都仅限于所选年份。所选年份存储在 session 变量和全局变量中。

我正在使用 active_adminactive_admin_import,并且我想将导入数据限制为仅选定的年份。

我通过在模型中添加验证来做到这一点。首先,我尝试使用 session 变量,但我意识到模型无权访问 session ;因此,我最终将选定的年份放入 $year 变量中。

这在开发中有效,但在我推送到生产环境后,模型中的全局变量为空白,并且我的验证不起作用。

根据我读到的内容,我了解到让模型可以访问 session 数据是一个坏主意。我想不出其他的解决方案。有什么建议吗?

附加信息:由于主表可以存储多年,因此我导入到工作表(具有一年的验证规则),然后将数据复制到生产表。

这样,如果导入数据的年份或年份错误,导入将失败并且用户会收到错误消息。

最佳答案

正如您所说,您的 session 数据在您的模型中不可用,只有您的 Controller (也许还有 View - 不确定)可用。

因此,解决此问题的方法是从数据可用的 Controller 调用模型方法,并将 session 数据作为参数。假设您有一个方法,可以根据 session 数据将模型的一个属性设置为 true 或 false:

apps/models/model.rb

def thing_to_do(session_data)
  # do something with your session data
end

然后在您当前正在点击的 Controller 操作中,例如显示操作:

应用程序/ Controller /random_controller.rb

def show
  model.thing_to_do(session[:user_id])
end

这将使用 session 变量作为参数来调用模型方法“thing_to_do”。显然,您可以根据需要包含尽可能多的 session 变量

关于ruby-on-rails - Rails 访问模型中的 session 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49364647/

相关文章:

mysql - 如何使用 Resque 在父子之间共享 MySQL 连接?

ruby-on-rails - Rails - 如何选择表格中的最后一个日期?

ruby-on-rails - Rspec:如何测试引发错误的方法

ruby-on-rails - 如何按时间订购

ruby - 在 Ruby 中,{1 => new "new")} 中的 ("alice"是什么意思?

Ruby 和 if 语句

ruby - 位于屏幕底部的输入行

ruby - selenium-webdriver 的 launcher.rb

ruby-on-rails - 在 OSX catalina(10.15.1) 中使用 rbenv 安装 ruby​​-2.4.0 时构建失败(OS X 10.15.1 使用 ruby​​-build 20191124)

ruby-on-rails - 如何在 Rails 迁移中将数据从一个表移动到另一个表?