【问题标题】:Adding variables from object passed from model to controller从从模型传递到控制器的对象中添加变量
【发布时间】:2010-09-19 23:33:02
【问题描述】:

我有一个 Person 模型。创建新的 Person 时,我想在控制器中设置一个 random_variable 并将其作为 @person 对象的一部分传递。我试过了

型号

attr_accessor :random_variable

控制器:

def create
  @person = Person.new(params[:person])
  @person.random_variable = 'A Random string'  
  @person.save          
end

不幸的是,如果我尝试访问模型中的 self.random_variable,这不起作用(我得到 nil)。

有人可以解释为什么这不起作用,以及如何去做吗? (是的,我知道这并不真正符合 MVC 约定,但做我需要的唯一其他方法是非常重的非干控制器)

【问题讨论】:

  • 我想我们应该假设您正在使用 active_record 并且 random_variable 是您的 Person 对象的数据库中的实际属性?一些模型代码和该模型的架构可能会有所帮助。
  • 使用活动记录,但 random_variable 不是真正的数据库属性,因此 attr_accessor
  • 能否提供Person模型的源代码?

标签: ruby-on-rails ruby model-view-controller


【解决方案1】:

您所描述的应该有效。您如何确定随机变量实际上为零?您是否尝试过使用调试器?

【讨论】:

  • 伯灵顿,我正在使用 random_variable 执行计算,但出现错误。是的,我已经使用调试器检查它是否确实为 nil。
  • 正如我所说,您的代码应该可以工作。我能想到的唯一另一件事是您试图在不同的时间点访问 random_variable 并假设它是 Person 的持久属性。只要@person 实例在范围内,它就可用。
【解决方案2】:

你试过只使用 update_attribute 吗?

update_attribute(:random_variable, 'A Random string')

或者,也许可以跳转到脚本/控制台以查看到底发生了什么。

【讨论】:

    【解决方案3】:

    发生了一些奇怪的事情。正如 Brad 建议的那样,我应该解释一下,我正在尝试在另一个对象的 setter 方法中访问 random_variable。我知道 params 被交给了控制器,而模型只有在调用 @person.save 时才被访问。由于某种原因,setter 似乎在控制器之前被击中。

    我是基于这样一个事实,当我不小心同时在模型设置方法和控制器中放入了调试器语句时,模型调试器首先被触发。除非有人能解释这一点,否则我显然将不得不做一些阅读。不幸的是,我今晚需要让这个工作,所以我将暂时寻求解决方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      相关资源
      最近更新 更多