如何在rails中复制另一个模型的属性?

时间:2017-05-27 04:35:54

标签: ruby-on-rails ruby ruby-on-rails-3

我尝试在创建后使用email复制User属性,但在日志中我收到错误。

我尝试的方法是:

class Car < ActiveRecord::Base
  belongs_to :user
  attr_accessible  :email, :engine

  after_create :get_email

  def get_email
    email = user.email.dup
  end
end

有人可以提示吗?

1 个答案:

答案 0 :(得分:0)

您的代码中缺少两件事:

    设置self。的值需要
  1. email
  2. 设置email
  3. 后需要保存对象

    因此,在添加selfsave后,您的get_email方法应如下所示:

    def get_email
      self.email = user.email
      save
    end
    

    请注意,dup也已删除,因为不需要复制该值(有关dup here的更多信息)。

    也就是说,我建议使用before_create操作代替after_create

    class Car < ActiveRecord::Base
      belongs_to :user
      attr_accessible  :email, :engine
    
      before_create :get_email
    
      def get_email
        self.email = user.email
      end
    end
    

    使用:before_crete,您将从email复制User,只需要保存一次对象。如果您使用:after_create执行此操作,首先要保存对象,然后在email中查找User,然后再执行update(即再次保存) )。