Rails访问模型中的会话数据

时间:2018-03-19 13:52:04

标签: ruby-on-rails ruby

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

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

我正在使用active_adminactive_admin_import,我想限制只将数据导入所选年份。

我通过在模型中添加验证来实现此目的。首先,我尝试使用会话变量,但我意识到该模型无法访问会话;因此,我最终将所选年份变为$year变量。

这是在开发中工作,但在我推动生产后,全局变量在模型中是空白的,我的验证不起作用。

根据我的阅读,我理解让模型可以访问会话数据是个坏主意。我无法考虑不同的解决方案。有什么建议吗?

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

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

1 个答案:

答案 0 :(得分:2)

正如你正确地说你的会话数据在你的模型中是不可用的,只有你的控制器(也许是视图 - 不确定)。

因此,解决此问题的方法是从数据可用的控制器调用模型方法,并将会话数据作为参数。让我们假设您有一种方法可以根据会话数据将模型的某个属性设置为true或false:

应用/模型/ model.rb

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

然后在您当前正在进行的控制器操作中,例如show action:

应用程序/控制器/ random_controller.rb

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

这将调用模型方法' thing_to_do'将session变量作为参数。显然,您可以根据需要包含任意数量的会话变量