我的应用允许用户登录并拥有会话。我有一个用户控制器和一个会话控制器,主要是从railscasts"从头开始授权"开发的。 我最近添加了使用jquery上传程序将文件上传到S3的功能......再次大部分来自railscasts"上传到亚马逊S3"。
问题是我的上传不是特定于用户的。现在我的#34;上传"控制器有一个"授权" before_filter以确保您必须登录才能访问上传者;但是,一旦用户上传文件,所有用户都会看到上传内容!不好!我需要确保用户只看到他们上传的相应文件。
我尝试了一些事情,但似乎都没有。我正在寻找一些方向来确保用户只能看到他们上传的文件。我在嵌套资源上关注不同的railscast和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和我的模型似乎有适当的连接(下面的代码)。在终端I中键入&#34; rake routes&#34;我按预期获得了一个列表(见下文)但是我得到并且错误:&#34;没有路由匹配{:action =&gt;&#34; show&#34;,:controller =&gt;&#34; cust_uploads&#34 ;}&#34;与user_cust_uploads_path的链接。 cust_uploads路径中有一个show模板,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
答案 0 :(得分:0)
考虑到你想要实现
为什么不将上传与特定用户ID相关联,然后在视图中显示它们时,将它们从自己的ID(current_user.uploads
)中拉出来