1

アプリケーションが制御する保護されたフォルダー内の個人用ドロップボックスにユーザーがデータを保存できるようにするアプリケーションを作成しています。そのため、各ユーザーは自分の個人用ドロップボックス アカウントにファイルを保存してアクセスする必要があります。

これを行うには、ストレージに paperclip-dropbox gem を活用したいと思います。ペーパークリップをドロップボックスに直接アップロードできます: https://github.com/janko-m/paperclip-dropbox

paperclip-dropbox gem の認証情報を設定するコードは次のとおりです。: 現在、current_user は機能しません。現在のセットアップが機能するために何が必要かを概説するために、そこに置いているだけです。

Image.rb

has_attached_file :avatar,
                  :storage => :dropbox,
                  :dropbox_credentials => {app_key: DROPBOX_KEY,
                                           app_secret: DROPBOX_SECRET,
                                           access_token: current_user.token,
                                           access_secret: current_user.secret, 
                                           user_id: current_user.uid, 
                                           access_type: "app_folder"}

ドロップボックス認証では、current_user がその特定の資格情報セットを取得する必要があることに注意してください。

モデルから current_user にアクセスすることは想定されていないことを知っています。そのようにしておきたいので、この現在のセットアップでそれを行う方法を誰かが理解するのを手伝ってくれますか? または、より良い代替案を提案しますか?

基本的に、ユーザーごとに access_token、access_secret、および user_id を条件付きで変更する必要があります。

ありがとう!

4

3 に答える 3

2

他の回答はあいまいすぎて受け入れることができなかったので、私は自分の質問に答えるつもりです - それらは正しい道を進んでいましたが。コミュニティは、それを裏付けるためにより多くのコードを含む回答を好むと思います。

だからここに行きます。has_attached_fileを動的に変更するにuser_idは、アタッチメント モデルに列を作成して、呼び出さないようにする必要がありますcurrent_user(これは、醜いハックなしでは不可能です)。belongs_to次に、ユーザーの関連付けを完了するためにも必要です。Songこの例では、オーディオ ファイルをモデルに添付するとします。

動的に設定された変数を取得するための鍵は、after_initializeコールバックでアタッチメントを初期化することです。

ソング.rb

belongs_to :user    
has_attached_file :audio
after_initialize :init_attachment

def init_attachment
    self.class.has_attached_file :audio,
    :storage => :dropbox,
    :dropbox_credentials => {app_key: DROPBOX_KEY,
                             app_secret: DROPBOX_SECRET,
                             access_token: self.user.token,
                             access_token_secret: self.user.secret,
                             user_id: self.user.id
                             access_type: "app_folder"},
    :dropbox_options => {}
end

もちろん、関連付けを別の方法で自由に設定できますが、これは提起された質問の実際のコード例です。

于 2013-10-24T03:28:20.127 に答える
0

Ruby on Rails - Paperclip and dynamic parametersから利益を得るかもしれないこのリソースを見つけました

より具体的には、これはあなたがしていることに光を当てるかもしれないと思いました:

# AssetsController
def create
  @project = Project.find(params[:project_id])
  @asset = @project.assets.build(params[:asset])
  @asset.uploaded_by = current_user

  respond_to do |format|
    # all this is unrelated and can stay the same
  end
end

「@asset.uploaded_by」がコントローラーに設定されていることに注意してください。おそらく、同様の変数をモデルに渡すことができますか? 具体的にどのように行うかはわかりませんが、基本的には、ファイルを保存しようとする前に保存オプションを設定できるため、オプションを動的に設定できます

于 2013-10-22T09:13:12.640 に答える
0

最初に行うべきことは、関連付けを設定することだと思います。その後、参照の代わりにImage.belongs_to :user単純に etc. を使用できます。user.tokencurrent_user

今、難しい部分です。次のように単純に入力することはできません。

access_token: user.token

単にメソッドに応答しないクラスであるためselfです(インスタンスメソッドです)。私の考えは、呼び出し時にこのラムダに渡されるアタッチメント インスタンス (たとえば) を持つ引数としてラムダを受け入れることができるように、この gem を変更することです。問題は、この宝石をそのように変更するのが難しいかどうかまだわからないことです。Imageuser

于 2013-10-18T09:04:43.833 に答える