0

Catarseプロジェクト用のStripe支払いエンジンを作成しています。プロジェクトの所有者であるユーザーからユーザーのプロジェクトにコピーする必要のあるレコードが3つあります。しかし、私は初心者なので、コードは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

....

私のストライプコードはエンジンであるため、これら3つのレコードのみが必要です。三つのこと:

1)最初はupdate_attributesを使用しようと思っていましたが、そのメソッドで.dupを使用できるかどうかわかりません。

2)これをmain_appにアクセスできるエンジンにあるヘルパーに入れて、ユーザーがmain_appproject_controllerコードを編集する必要がないようにすることは可能ですか?

3)上記の.dupコードを表示するためのよりクリーンな方法はありますか?醜いから!

ご協力いただきありがとうございます!

4

2 に答える 2

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 に答える
0

多分このようなもの:

Gemfile:

  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 に答える