0

我正在为 Catarse 项目创建一个 Stripe 支付引擎。我需要将三条记录从我的用户(项目所有者)复制到我的用户项目。但是因为我是初学者,所以代码看起来像 S&%#te!

#project_controller.rb

def create
  ...
  check_for_stripe_keys
  ....
end

def show
  ...
  check_for_stripe_keys
  ....
end

....

def check_for_stripe_keys
  if @project.stripe_userid.nil?
    @project.reload
    @project.stripe_access_token = @project.user.stripe_access_token.dup
    @project.stripe_key = @project.user.stripe_key.dup
    @project.stripe_userid = @project.user.stripe_userid.dup
  elsif @project.stripe_userid != @project.user.userid
    @project.stripe_access_token = @project.user.stripe_access_token.dup
    @project.stripe_key = @project.user.stripe_key.dup
    @project.stripe_userid = @project.user.stripe_userid.dup
  end
  @project.save
end

....

我只需要这三个记录,因为我的条带代码是一个引擎。三件事:

1)最初我想用户 update_attributes 但我不知道是否可以在该方法中使用 .dup 。

2)是否可以将它放在位于 main_app 可访问的引擎中的帮助程序中,这样用户就不必编辑 main_app project_controller 代码?

3) 是否有更简洁的方式来显示上述 .dup 代码?因为太丑了!

谢谢你的帮助!

4

2 回答 2

0

也许是这样的:

宝石文件:

  gem 'deep_cloneable'

代码:

  @user.dup :include => [:stripe_userid, :stripe_access_token, :stripe_key]

我不太了解你们的关系。但是看看这个答案:复制活动记录记录的最简单方法是什么?

这是 deep_cloneable: https ://github.com/moiristo/deep_cloneable

于 2013-02-19T21:48:53.577 回答
0

这是一种更紧凑的方式来编写您已有的内容:

[:stripe_access_token, :stripe_key, :stripe_userid].each do |field|
  @project.send("#{field.to_s}=", @project.user.send(field).dup)
end
于 2013-02-19T22:41:39.257 回答