所以我的User
模型有first_name
和last_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
方法返回。
我怎样才能做到这一点?
答案 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