2012-12-12 81 views
0

我有一個用於在同一視圖上創建模型(名爲Image)和該模型的所有實體的列表的窗體。該模型與一個稱爲Deck的第二個模型(一個Deck具有多個圖像)以一對多關係關聯。在我看來,列表如下所示:無效模型對象的Rails路徑助手

# image list  
<% @deck.images.each do |img| %> # iterates also through invalidated model 
    <%= link_to 'Delete', deck_image_path(@deck, img), 
      :confirm => 'Sure?', :method => :delete %> 
<% end %> 

當@image對象的驗證失敗時,會出現我的問題。迭代也通過無效圖像對象進行迭代,並給出下一行的錯誤,表示該對象沒有這樣的路徑。

我可以檢查每個對象的.new_record ?,但這是首選的方式?或者我在做一些絕對錯誤的事情?我有沒有人見過這樣的問題;/

更新1 - 控制器

def create 
    @deck = Deck.find(params[:id]) 
    @image = @deck.images.build(params[:image]) 

     respond_to do |format| 
      if @image.save 
       # redirect 
       flash[:notice] = "Saved succesfully." 
       format.html { redirect_to(@deck) } 
      else 
       # render 
       format.html { 
       flash.now[:error] = "Could not be saved." 
       render 'decks/show' 
       } 
     end 
    end 
end 

更新2 - 更多的混亂

好吧,就算我現在是絕對感到困惑。從

# not working 
@image = @deck.images.build(params[:image]) 

改變的方法創建第二行

# working 
@image = Image.new(params[:image]) 
@image.deck = @deck 

似乎沒有任何錯誤的工作。有什麼不同?

更新3 - 查看和錯誤消息

<h3>Upload Image</h3> 
<%= form_for @image, :url => deck_images_path(@deck), :html => { :multipart => true } do |form| %> 
<fieldset> 
    <legend>Upload new image</legend> 
    <%= render :partial => 'shared/model_errors', :locals => {:model => @image} %> 
    <%= form.file_field :image %><br/> 
    <%= form.submit "Upload", :class => 'btn btn-primary' %> 
</fieldset> 
<% end %> 

<h3>Show all existing images</h3> 
<% @deck.images.each do |img| %> 
    <%= image_tag img.image.url %> 
    <%= link_to 'Delete'.html_safe, deck_image_path(@deck, img) %> 
<% end %> 

錯誤消息:

No route matches {:controller=>"images", :action=>"destroy", :deck_id=>#<Deck id: 1, 
name: "Test", description: "Test", created_at: "2012-12-10 20:44:22", 
updated_at: "2012-12-10 20:44:22">, :id=>#<Image id: nil, created_at: nil, 
updated_at: nil, image_file_name: nil, image_content_type: nil, 
image_file_size: nil, image_updated_at: nil, deck_id: 1>} 
+0

請給我看看控制請 – Jean

+0

添加ImageController#create – shadowhorst

+0

shadowhorst您的控制器是好的,但我沒有承諾您的觀點,請粘貼form_for的補碼,因爲我不知道爲什麼您要創建刪除鏈接一個不存在的圖像。 – Jean

回答

0

根據[1]:Build vs new in Rails 3 parent_model.children.build奧德parent_model.children.new似乎立即在內存中建立關係。因此parent_model.children被一個新的具有parent_id = parent的子模型填充。

Children.new的替代方案似乎在保存新的子對象後添加了這種新的關係。因此它在所有兒童的迭代中失蹤。