Ruby on rails Rails有助于集成嵌套?特定于用户的上载到现有应用程序

Ruby on rails Rails有助于集成嵌套?特定于用户的上载到现有应用程序,ruby-on-rails,authentication,nested,associations,Ruby On Rails,Authentication,Nested,Associations,我的应用允许用户登录并进行会话。我有一个用户控制器和一个会话控制器,主要由railscasts“从头开始授权”开发。 我最近添加了使用jquery上传器将文件上传到S3的功能。。。同样,很多信息来自Railscapsts“上传到AmazonS3” 问题是我的上传不是特定于用户的。现在我的“上传”控制器有一个“授权”前过滤器,以确保您必须登录才能访问上传程序;但是,一旦用户上传文件,所有用户都会看到上传!不好的!我需要确保用户只看到他们上传的相应文件 我试过一些方法,但似乎都不管用。我正在寻找一些

我的应用允许用户登录并进行会话。我有一个用户控制器和一个会话控制器,主要由railscasts“从头开始授权”开发。 我最近添加了使用jquery上传器将文件上传到S3的功能。。。同样,很多信息来自Railscapsts“上传到AmazonS3”

问题是我的上传不是特定于用户的。现在我的“上传”控制器有一个“授权”前过滤器,以确保您必须登录才能访问上传程序;但是,一旦用户上传文件,所有用户都会看到上传!不好的!我需要确保用户只看到他们上传的相应文件

我试过一些方法,但似乎都不管用。我正在寻找一些如何确保用户只看到他们上传的文件的方向。我正在关注不同的RailsCast和rails关于嵌套资源的文档(我想这就是我必须要做的吗?),但我一直缺少一些东西,因为似乎有很多我不完全理解的更改。我修正了一个错误,然后又碰到了另一个错误,我想知道我是否走上了正确的道路,或者我错过了什么

我认为应该首先嵌套资源:

  resources :users do
    resources :cust_uploads
  end
然后,我修改了模型,如下所示,并运行“rakedb: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

考虑到你想要实现的目标

  • 上传内容的用户只能看到它们

  • 为什么不将上传与特定的用户id相关联,然后在视图中显示它们时,从它们自己的id(
    current\u user.uploads

    简单的解决方案是只存储每次上传的用户id,并使用类似
    CustUpload.where(:user\u id=>current\u user.id)的方法控制查看哪些上传
    。如果您添加了所有正确的关系,您甚至可以使用
    current\u user.cust\u uploads
    访问它们。只需确保在创建过程中分配了一个用户,而不是用这一点来重新构造所有内容就很容易了!谢谢我会玩它,看看它会把我带到哪里。我想这就是我想要做的。。我必须嵌套资源和关联模型,因为我已经开始了,对吗?下一步是使用类似于注释中的调用修改视图和控制器?谢谢@重要的是将这些模型与关系关联起来。如果用户可以
    有许多
    上传。设置这些关系、运行迁移和更新控制器/视图,以便在创建用户或用户更新数据时创建这些关系。
    
    <%= form_for(@cust_upload) do |f| %>
    
    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
    
    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