私のアプリでは、ユーザーはログインしてセッションを行うことができます。私はユーザーコントローラーとセッションコントローラーを持っており、主に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