我的数据库包含多个年
的数据(每个表都有一个年
列)。每当用户登录时,他们都必须选择要使用的年份。
登录后,用户访问的所有数据都仅限于所选年份。所选年份存储在 session 变量和全局变量中。
我正在使用 active_admin
和 active_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/