【问题标题】:How to access virtual attribute from a controller如何从控制器访问虚拟属性
【发布时间】:2013-04-18 10:19:57
【问题描述】:

我在 Mac OS X Mountain Lion 中使用 Rails 3.2.11 和 Ruby 1.9.3

我有一个用户模型,我创建了一个名为 message 的虚拟属性

attr_accessor :message

在我的代码中,我试试这个:

if condition == true
  self.message = "Value is True."
else
  self.message = "Value is not True"

在我的控制器中,我试试这个

def method
  user = User.find(1)
  flash[:message] = user.message
end

但 Flash 消息不显示任何内容。是零。如何将我在模型中设置的值传递给控制器​​?非常感谢!

【问题讨论】:

  • 使用实例变量而不是局部变量。实例变量以 @ 符号为前缀,因此在您的情况下它将是 @user 而不是 user
  • 不会有什么不同。在我的实际代码中,我使用了实例变量。
  • 即使“user”只是一个局部变量,它仍然是一个用户对象,所以它应该仍然具有消息属性。
  • 抱歉,问题看错了

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

似乎是逻辑:当您从数据库中检索对象时,没有理由它的 attr_accessor 应该包含任何内容。

坚持你的逻辑,你宁愿:

  • 移除 attr_accessor

  • 在您的 User 类中创建一个方法。

像这样:

def message 
  if condition
    "Value is True."
  else
    "Value is not True"
  end
end

请注意,您正在耦合数据和视图,这不是一个好的做法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多