Ruby on rails Rails有助于集成嵌套?特定于用户的上载到现有应用程序
我的应用允许用户登录并进行会话。我有一个用户控制器和一个会话控制器,主要由railscasts“从头开始授权”开发。 我最近添加了使用jquery上传器将文件上传到S3的功能。。。同样,很多信息来自Railscapsts“上传到AmazonS3” 问题是我的上传不是特定于用户的。现在我的“上传”控制器有一个“授权”前过滤器,以确保您必须登录才能访问上传程序;但是,一旦用户上传文件,所有用户都会看到上传!不好的!我需要确保用户只看到他们上传的相应文件 我试过一些方法,但似乎都不管用。我正在寻找一些如何确保用户只看到他们上传的文件的方向。我正在关注不同的RailsCast和rails关于嵌套资源的文档(我想这就是我必须要做的吗?),但我一直缺少一些东西,因为似乎有很多我不完全理解的更改。我修正了一个错误,然后又碰到了另一个错误,我想知道我是否走上了正确的道路,或者我错过了什么 我认为应该首先嵌套资源:Ruby on rails Rails有助于集成嵌套?特定于用户的上载到现有应用程序,ruby-on-rails,authentication,nested,associations,Ruby On Rails,Authentication,Nested,Associations,我的应用允许用户登录并进行会话。我有一个用户控制器和一个会话控制器,主要由railscasts“从头开始授权”开发。 我最近添加了使用jquery上传器将文件上传到S3的功能。。。同样,很多信息来自Railscapsts“上传到AmazonS3” 问题是我的上传不是特定于用户的。现在我的“上传”控制器有一个“授权”前过滤器,以确保您必须登录才能访问上传程序;但是,一旦用户上传文件,所有用户都会看到上传!不好的!我需要确保用户只看到他们上传的相应文件 我试过一些方法,但似乎都不管用。我正在寻找一些
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