【问题标题】:Rails: Assign values to fields in modelRails:为模型中的字段赋值
【发布时间】:2013-04-29 21:17:51
【问题描述】:

我有两个字段,first_name 和brand_name。用户在登录时输入 first_name。如果他是所有者,则输入 brand_name。当用户创建帐户时,brand_name 默认等于 first_name。用户可以稍后更改。

为此,我在用户模型中编写了这个方法,

def brand_name
    first_name
end

但是,尽管用户输入了不同的品牌名称,但它会将品牌名称设置为名字。我试过这样做:

def brand_name
    if brand_name.nil?
      first_name
    else
      brand_name
    end
end

但给出错误- SystemStackError:

stack level too deep

有人可以帮忙吗?

【问题讨论】:

    标签: ruby activerecord ruby-on-rails-3.2


    【解决方案1】:

    您的方法正在调用自身,这会导致无限递归。像这样重写你的方法:

    def brand_name
      self[:brand_name].present? ? self[:brand_name] : first_name
    end
    

    【讨论】:

    • 如果brand_name 为空,则不取名字。如果存在品牌名称,则显示品牌名称。否则什么也不打印。
    • 您的问题并不完全清楚,但我继续更新我的答案以处理品牌名称设置为空字符串的情况。您可能需要考虑验证brand_name 的长度> 0。
    • 哦,很抱歉,无法正确解释。感谢您编辑问题!解决方案有效:-) 有一个疑问,你的“自我”是必要的吗?不知道如何使用它以及何时使用。
    • self 在这里是必要的,因为我使用了[] 方法来动态访问 ActiveRecord 属性。这相当于read_attribute(:brand_name),但我更喜欢这种形式,因为它更短。
    • 哦。谢谢你的解释。:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 2018-11-18
    相关资源
    最近更新 更多