大佬教程收集整理的这篇文章主要介绍了ruby-on-rails – 在模型中设置会话变量,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
session[:cannot_reason] = "no such item"
我想在我的用户模型中设置以上.现在我得到这个错误:
undefined local variable or method `session' for #<User:0x00000102eb9c38>
想法?谢谢
话虽这么说,不太干净的方法是将会话哈希作为一个参数传递给将在其上运行的User方法:
class User < ... def mymethod(session,count) session[:count] = count end end
在你的控制器中,你会做一些类似的事情:
def update # ... user.mymethod(session,count) end
想象我的方法是实现一些业务逻辑,这将适当地修改会话哈希.您不必将会话哈希传回控制器,因为Ruby传递对对象的引用(如Hash) – 对这些引用的对象进行了修改.
一个忠告:上面的例子在我看来是臭的.这是因为用户是一个ActiveRecord模型(我假设)持续到一个数据库,我们正在添加使它也持续到会话cookie的行为.对我来说,这违反了SRP,应该避免.
我将实现这一点的方式是将会话存储逻辑提取到一个单独的域对象,其中包含其存在的原因.也许,例如,count不仅仅是一个“count”,它是用户临时购物车中的项目总数.
class TemporaryCart def initialize(session) @session = session end def add_item # ... other item adding logic @session[:temporary_cart][:num_items] += 1 end end
现在你的控制器看起来像这样:
def update # ... TemporaryCart.new(session).add_item end
如果您发现自己使用会话存储很多,这是一个更加显而易见的开放门,可以通过一个明显的方式来抽出会话访问代码.还要注意,我命名了会话哈希中的数据(但没有显示此实现).我建议你这样做,所以你不要踩你自己的脚趾添加其他数据.
以上是大佬教程为你收集整理的ruby-on-rails – 在模型中设置会话变量全部内容,希望文章能够帮你解决ruby-on-rails – 在模型中设置会话变量所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。