我的应用程序允许用户登录并进行会话。我有一个用户控制器和一个会话控制器,主要是从 railscasts“从头开始授权”开发的。我最近添加了使用 jquery 上传器将文件上传到 S3 的功能......同样,其中很多来自 railscasts“上传到亚马逊 S3”。
问题是我的上传不是特定于用户的。现在我的“上传”控制器有一个“授权” 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
任何方向将不胜感激。我已经学习了很多教程,并且可以从头开始做一些简单的事情,但我似乎无法将此功能与我现有的应用程序集成。这里有一些我无法思考的事情,我希望有人可以为我提供那个 Eurika 时刻!谢谢
编辑 routes.rb 和我的模型似乎有适当的连接(下面的代码)。当我在终端输入“rake routes”时,我得到了一个预期的列表(见下文),但是我得到了一个错误:“没有路由匹配 {:action=>"show", :controller=>"cust_uploads"}" for a link与 user_cust_uploads_path。cust_uploads 路径中有一个显示模板,并且 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