如何将会话变量传递给RoR中的模型?

Vic*_*Lam 5 model-view-controller session ruby-on-rails session-variables

我在我的应用程序中使用了一个全局变量来传递信息.但我遇到了问题,谢谢大家在这里建议我将这些数据存储在与数据库的会话中.

我试过,但我发现我无法访问Model中的会话变量.我用Google搜索并知道这是模型正常行为,RoR不会将会话变量传递给Model.

所以,我想在验证和控制器中使用该会话变量....

  1. 如何将会话变量的值传递给模型?要么

  2. 我的用例有什么其他方法吗?我需要一个存储值的变量,这是所有MVC所必需的,并且应该在不同的并发用户之间独立.

感谢大家.:)

pup*_*eno 6

如果我理解正确,会话变量会改变您验证模型的方式.我相信对此的正确解决方案如下:

class Blog < ActiveRecord::Base
  attr_accessor :validate_title

  validate_presence_of :title, :if => :validate_title
end

class BlogsController < ApplicationController
  def new
    @blog = Blog.new
    @blog.validate_title = session[:validate_title]
  end
end
Run Code Online (Sandbox Code Playgroud)

代码还没有被测试,但这就是想法.if参数可以是方法的名称,您可以在那里做任何你想做的事情.如果需要,您可以使用各种验证模式.例如:

class Blog < ActiveRecord::Base
  attr_accessor :validation_mode

  validate_presence_of :title, :if => :validate_title

  def validate_title
    validation_mode == "full" or validation_mode == "only_title"
  end
end

class BlogsController < ApplicationController
  def new
    @blog = Blog.new
    @blog.validate_mode = session[:validate_mode]
  end
end
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请阅读有关验证的指南.