2012-12-12 3 views
0

동일한 모델에서이 모델의 모든 엔티티에 대한 목록 (동일한 이름의 이미지)과 해당 모델의 목록을 만듭니다. 모델은 일대 다 관계에서 갑 (Deck)이라는 두 번째 모델과 연관되어 있습니다 (하나의 갑판에는 여러 이미지가 있음). 내보기의 목록은 다음과 같습니다.잘못된 모델 객체에 대한 레일 경로 도우미

# 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?를 확인할 수 있지만이 방법이 더 좋습니까? 아니면 절대적으로 잘못된 것을하고 있습니까? - 컨트롤러

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 - 더 혼란

음이 확인 지금 절대적으로 혼란 스러워요/

업데이트 1, 나는 다른 이러한 문제로 볼 수 아무도 없다.

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

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

에서 만드는 방법에서 두 번째 라인을 변경하면 오류없이 작동하는 것 같다. 그 차이점은 무엇입니까?

업데이트 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

당신의 컨트롤러는 괜찮습니다.하지만보기에 좋지 않습니다. 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의 대안은 새 하위 개체를 저장 한 후이 새로운 관계를 추가하는 것 같습니다. 따라서 모든 어린이에 대한 반복에서 그 실종.