Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在rails中复制另一个模型的属性?_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

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哦,您是对的。我会更新我的答案。比你强。