2011-12-05 93 views
2

我目前正在研究社交網站的Web應用程序,但好像讓我的嵌套資源正常工作是不可能的。如果你能幫助我,那會很棒,我會非常感激。Rails 3嵌套的資源:無法獲取表單或頁面

這是我的路線。我想有像mysite.com/username/photos /(新建,編輯等)的網址結構。 url結構是這樣的,但是當我嘗試訪問表單或頁面時出現錯誤。在下面,我發佈了迄今爲止我所擁有的內容。

的routes.rb

resources :users do 
    resources :photos 
    end 

photo.rb

belongs_to :users 

user.rb

has_many :photos, :foreign_key => "id", :dependent => :destroy 

_form.html.erb 此表單具有使用回形針的附件。有一個<%之前,我刪除它,因爲它不會顯示在這裏下面的整個代碼。

form_for(@photos,@user) :html => {:multipart => true} do |f| %> 

photos_controller.rb

def new 
    @photo = Photo.new(params[:photo]) 
end 

回答

1

您需要創建一個before_filter來獲取用戶以及要創建的表單帖子,而不是新建的。你的照片控制器應該是這樣的:

before_filter :get_user 
... 

def new 
    @photo = @user.photos.build 
end 

def create 
    @photo = @user.photos.build(params[:photo]) 
    respond_to do |format| 
    if @photo.save 
     format.html {redirect_to [@user, @photo], notice: "Photo saved!"} 
    else 
     format.html {render action: "new"} 
    end 
    end 
end 
... 
private 
def get_user 
    @user = User.find(params[:user_id]) 
end 

這裏,before_filter抓住用戶。在嵌套路由中,父資源ID將位於params[:parent_id]或在此情況下爲params[:user_id]。然後在創建控制器中,您想從@user.photos集合構建照片。這將自動創建照片和用戶之間的參考。

此外,你的form_for關係向後。它應該是form_for([@user, @photo]) ...,而不是相反。

+1

謝謝你和小錯誤。我必須更仔細地開始查看我的代碼。感謝您指出它們! – coletrain

1

不能確定這是問題,但似乎你form_for標籤格式不正確。在指定用戶後,您正在關閉form_for標記上的圓括號,因此它忽略了:html部分。我想試試這個:

<%= form_for([@photos, @user], :html => {:multipart => true}) do |f| %> 

@photos@user必須作爲數組進行傳遞。

而且,不知道爲什麼@photos PARAM將是複數。不應該是[@photo, @user]?儘管如此,我可能是錯的。

0

你得到什麼錯誤,在哪裏?

幾件事情: 在photo.rb

belongs_to :user 

,而不是users

你想創建的照片users#new頁?如果是這樣,嘗試看看accepts_nested_attributes_for用法: 在user.rb

has_many :photos, :dependent => :destroy 
accepts_nested_attributes_for :photo 

然後,你users#new形式:

<%= form_for @user, :html => {:multipart => true} do |f| %> 
    # ... user attributes ... 
    <%= f.fields_for :photo do |p| %> 
    <%= p.file_field :name %> 
    <% end %> 
<% end%> 

而且,考慮使用carrierwave回形針,而不是爲你的上傳。這裏是railcast。祝你好運。

+1

謝謝!過一段時間後發現它。我沒有更新控制器以包含我的新模型。此外,您發佈的視頻還幫助我很多,再次感謝! – coletrain