2011-05-06 102 views
0

我有一个UploadsController和UsersController,其中用户' has_many:uploads'通过uploads.rb中的多态附件。Rails-3路由问题

现在,当我浏览到http://localhost:3000/users/1/uploads

我得到重新路由到上传#指数和渲染被多次调用 如下图所示:

Started GET "https://stackoverflow.com/users/1/uploads" for 127.0.0.1 at 2011-05-06 22:00:38 +0100 
Processing by UploadsController#index as HTML 
Parameters: {"user_id"=>"1"} 
[1m [35mUser Load (0.0ms) [0m SELECT "users".* FROM "users" WHERE 
"users"."id" = 1 LIMIT 1 
[1m [36mUpload Load (0.0ms) [0m [1mSELECT "uploads".* FROM 
"uploads" [0m 
Rendered uploads/_upload.html.erb (0.0ms) 
Rendered uploads/_upload.html.erb (0.0ms) 
Rendered uploads/_upload.html.erb (0.0ms) 
Rendered uploads/index.html.erb within layouts/application 

这是我的config /路线

Uploader::Application.routes.draw do 
    devise_for :users 
    resources :users do 
    resources :uploads 
end 
root :to => 'users#index' 

class UsersController < ApplicationController 
    def show 
    @user = User.find 
    end 

views/users/show.html.erb 
<div> 
    <% @user.email %> 
    <h3 id="photos_count"><%= pluralize(@user.uploads.size, "Photo")%></h3> 
<div id="uploads"> 
    <%= image_tag @user.uploads.url(:small)%> 
    <em>on <%= @user.upload.created_at.strftime('%b %d, %Y at %H:%M') %></em> 
</div> 

<h3>Upload a Photo</h3> 
    <%= render "upload/form", :parent => @user, :upload => user.uploads.new %> 


class UploadsController < ApplicationController 
    def index 
    @uploads = Upload.all 
    @upload = Upload.new 
    end 

    def show 
    @upload = @parent.uploads.find(params[:id]) 
    @total_uploads = @parent.uploads.find(:all, :conditions =>{ :user_id => @upload.user.id}) 
end 

def create 
    @upload = @parent.uploads.build(params[:upload]) 
    @upload.document_content_type = MIME::Types.type_for(@upload.document.original_filename).to_s 
    @upload.document = params[:upload] 
     if @upload.save 
    flash[:notice] = "sucessfully saved upload" 
    respond_with{redirect_to [@parent, :uploads]} 
    respond_with{ render :json => {:upload => polymorphic_upload_path(@parent)} } 
    else 
    render :action => 'new' 
    end 
end 

views/uploads/index.html.erb 
<% unless @uploads.blank? %> 
    <% @uploads.each do |upload| %> 
    <%= render :partial => 'upload', :locals => {:collection => 
    @upload.try(:document)} %> 
    <% end %> 
<% end %> 
<div id="uploads"> 
    <h3>Upload a document</h3> 
    <%= render 'form', :parent => @parent, :upload => @upload.new % 
    </div> 

编辑

Also i have tried to fix this double render error by modifying the create action call to render or redirect without success. This is an excerpt from the log. 
Render and/or redirect were called multiple times in this action 
controllers/uploads_controller.rb:37:in `create' 

感谢

+1

究竟是什么错误?你有一个渲染一个局部的循环,然后是主索引渲染......它似乎在做它应该是的。 – 2011-05-06 22:41:53

回答

2

一切看起来像它的工作正常。您看到多个呈现的原因是因为它会多次渲染部分“uploads/_upload.html.erb”,每个用户上传一个。

你想要http://localhost:3000/users/1/uploads重定向到哪里?现在,您已经说过一个用户有很多上传,所以这个URL映射到属于id为1的用户的上传,这是UploadsController的索引操作。

嵌套资源就像生活在一个范围内的资源。在这种情况下,您的上传范围将限定在他们所属的用户。

+0

谢谢。我希望它重定向到views/users/show.html.erb,因为某些原因,在index.html.erb中调用的表单partial不会加载表单,其次它不会显示图像,所以我我以为我会将它重定向到views/users/show.erb.html。感谢 – brg 2011-05-06 22:56:58

+0

还它给出了错误: 渲染和/或重定向在 控制器/ uploads_controller.rb被调用多次:37:在'创建” – brg 2011-05-07 00:43:05

+0

的多次重定向并呈现是因为这样: respond_with {redirect_to的[@父母,:上传]} respond_with {render:json => {:upload => polymorphic_upload_path(@parent)}} 您无法重定向并呈现json。我想你可能想在respond_to块中这样做,这将允许你区分js和html请求。 – 2011-05-07 00:44:58