2

私のアプリでは、ユーザーはログインしてセッションを行うことができます。私はユーザーコントローラーとセッションコントローラーを持っており、主にrailscastsの「ゼロからの承認」から開発されています。最近、jqueryアップローダーを使用してファイルをS3にアップロードする機能を追加しました...これも、「AmazonS3へのアップロード」というrailscastからのものがたくさんあります。

問題は、アップロードがユーザー固有ではないことです。現在、私の「アップロード」コントローラーには「authorize」before_filterがあり、アップローダーにアクセスするにはログインする必要があります。ただし、ユーザーがファイルをアップロードすると、すべてのユーザーにアップロードが表示されます。良くない!アップロードしたそれぞれのファイルのみがユーザーに表示されるようにする必要があります。

私はいくつかのことを試しましたが、どれもうまくいかないようです。アップロードしたファイルだけがユーザーに表示されるようにする方法について、いくつかの方向性を探しています。ネスティングリソースに関するさまざまなrailscastsとrailsのドキュメントをフォローしています(これを行う必要があると思いますか?)が、100%理解していない変更がたくさんあるように見えるため、何かを見逃し続けています。あるエラーを修正してから別のエラーをヒットしましたが、正しい道を進んでいるのか、それとも何かが足りないのでしょうか。

これが機能するはずだと私が思った方法は、最初にリソースをネストすることです。

  resources :users do
    resources :cust_uploads
  end

次に、以下のようにモデルを変更し、「rake db:migrate」を実行してモデルを結合しました...外部IDフィールドを使用して移行ファイルを手動で変更する必要がある場合がありますか?:

class User < ActiveRecord::Base
    has_secure_password
    attr_accessible :email, :password, :password_confirmation
    validates_uniqueness_of :email
    has_many :CustUploads
end

class CustUpload < ActiveRecord::Base
  attr_accessible :cust_file_url, :name
  before_create :default_name
  belongs_to :User

  def default_name
    self.name ||= File.basename(cust_file_url, '.*').titleize if cust_file_url
  end
end

これにより、私が今戦っている大量のパスエラーが発生します...私のnew_cust_upload_pathはおそらくnew_user_cust_upload_pathのようなものです

また、フォームとコントローラーには多くの変更が必要だと思います。

form_forを使用しています

<%= form_for(@cust_upload) do |f| %>

どちらが@user.cust_uploadになると思いますか?

現時点でのコントローラー:

class UsersController < ApplicationController
    def new
        @user = User.new
    end

    def create
      @user = User.new(params[:user])
      if @user.save
        session[:user_id] = @user.id
        redirect_to root_url, notice: "Thank you for signing up!"
      else
        render "new"
      end
    end

end

class CustUploadsController < ApplicationController
  before_filter :authorize
  def index
    @cust_uploads = CustUpload.all
  end

  def show
    @cust_upload = CustUpload.find(params[:id])
  end

  def new
    @cust_upload = CustUpload.new
  end

  def create
    @cust_upload = CustUpload.create(params[:cust_upload])
  end

  def edit
    @cust_upload = CustUpload.find(params[:id])
  end

  def update
    @cust_upload = CustUpload.find(params[:id])
    if @cust_upload.update_attributes(params[:cust_upload])
        redirect_to @cust_upload_url, notice: "Cust upload was successfully updated."
      else
        render :edit
    end
  end

  def destroy
    @cust_upload = CustUpload.find(params[:id])
    @cust_upload.destroy
    redirect_to cust_uploads_url, notice: "Cust Upload was successfully destroyed"
  end
end

どんな方向でも大歓迎です。私は多くのチュートリアルを経験しており、簡単なことを最初から機能させることができますが、この機能を既存のアプリと統合することはできないようです。ここに頭を抱えることができない何かがあり、誰かがそのユーリカの瞬間を私に提供してくれることを願っています!ありがとう

EDITroutes.rb と私のモデルは適切な接続を持っているようです(以下のコード)。ターミナルで「rakeroutes」と入力すると、期待どおりにリストが表示されますが(以下を参照)、「ルートが一致しません{:action => "show"、:controller => "cust_uploads"}」というエラーが表示されます(以下を参照)。 user_cust_uploads_pathを使用します。cust_uploadsパスにshowtemplateがあり、rakeルートはそれが存在すると言っています!私は何が欠けていますか?

user_cust_uploads GET    /users/:user_id/cust_uploads(.:format)          cust_uploads#index
                      POST   /users/:user_id/cust_uploads(.:format)          cust_uploads#create
 new_user_cust_upload GET    /users/:user_id/cust_uploads/new(.:format)      cust_uploads#new
edit_user_cust_upload GET    /users/:user_id/cust_uploads/:id/edit(.:format) cust_uploads#edit
     user_cust_upload GET    /users/:user_id/cust_uploads/:id(.:format)      cust_uploads#show
4

1 に答える 1

0

あなたが達成したいことを考える

  1. ものをアップロードするユーザーはそれらだけを見る必要があります。

アップロードを特定のユーザーIDに関連付けて、ビューに表示するときに、アップロードを自分のIDからプルしてみませんか(current_user.uploads

于 2013-01-08T16:13:15.633 に答える