如何在现有模型上设置虚拟属性?

时间:2016-01-12 22:05:25

标签: ruby-on-rails ruby-on-rails-4 attributes attr

所以我的User模型有first_namelast_name列。

我想创建一个名为username的新虚拟属性,即使在我的路径文件中也可以访问。

我试过这样做:

attr_accessor :username 

  # getter
  def username
    @username
  end

  # setter
  def username=(user)
    @username = "#{user.first_name}.#{user.last_name}"
  end

但是当我尝试设置它时,我得到错误数量的参数错误。

[27] pry(main)> u.username=(u)
ArgumentError: wrong number of arguments (1 for 0)
from     
[28] pry(main)> u.username = u
ArgumentError: wrong number of arguments (1 for 0)
from 

u是有效的User记录。

理想情况下,我想做两件事。我希望能够检查数据库中所有user.username个对象的User,并且应该按照上述setter方法返回。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

我想,你在其他地方遇到了问题。在没有看到代码的情况下找出代码出了什么问题并不容易,但是这段代码本身没有任何错误:

escape(string)

或者您可以使用class User < ActiveRecord::Base def username=(value) @username = value end def username @username end end user = User.new(:first_name => "Bill", :last_name => "Gates") user.username = "billgates" user.username 替换getter和setter的手动定义:

attr_accessor

看一下这个截屏视频,以澄清事情:http://railscasts.com/episodes/16-virtual-attributes