Ruby on rails 如何在rails中复制另一个模型的属性?
我试图在创建后使用从Ruby on rails 如何在rails中复制另一个模型的属性?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我试图在创建后使用从User复制email属性,但在日志中我得到一个错误 我尝试的方法是: class Car < ActiveRecord::Base belongs_to :user attr_accessible :email, :engine after_create :get_email def get_email email = user.email.dup end end class-Car
User
复制email
属性,但在日志中我得到一个错误
我尝试的方法是:
class Car < ActiveRecord::Base
belongs_to :user
attr_accessible :email, :engine
after_create :get_email
def get_email
email = user.email.dup
end
end
class-Car
有人可以提供提示吗?您的代码中缺少两件事:
self
需要设置email
的值电子邮件后需要保存对象
self
和save
之后,您的get\u email
方法应该如下所示:
def get_email
self.email = user.email
save
end
请注意,dup
也已被删除,因为不需要复制该值(有关dup
的更多信息)
也就是说,我建议在创建操作之前使用
,而不是在创建操作之后使用:
class Car < ActiveRecord::Base
belongs_to :user
attr_accessible :email, :engine
before_create :get_email
def get_email
self.email = user.email
end
end
class-Car
使用:在创建之前,您将从用户
复制电子邮件
,只需保存对象一次。如果使用:创建后,首先保存对象,然后在用户中查找电子邮件,然后需要执行额外的更新(即再次保存)。请发布错误日志。好的,稍等,抱歉没有显示错误,但没有复制属性,您希望get_email返回user.email对象的浅层副本。你在这封邮件里到底得到了什么?谢谢你,格里!但我不知道为什么电子邮件仍然为零,这封电子邮件是我正试图从用户电子邮件中复制的汽车电子邮件OK,所以你想从相关的用户
中复制电子邮件
,并将其保存在当前汽车
对象的电子邮件
属性中?实际上,只有在为setter方法赋值时(否则Ruby将创建一个局部变量),才需要self
,而在读取时则不需要。因此,您可以将设置电子邮件的行更改为self.email=user.email
@spickermann哦,您是对的。我会更新我的答案。比你强。