2015-09-05 64 views
0

我正在使用設計進行身份驗證.user可以有很多albums.i有相冊控制器和view.i有照片模式。如何在編輯操作視圖中上傳新照片在軌道上

協會是用戶可以有很多專輯和專輯可以有很多照片。 我正在使用表格照片的嵌套屬性。使用載波上傳照片。我可以在創建新相冊期間在new.html.erb視圖中上傳新照片。 能夠刪除和更新edit.html.erb照片view.But我不能夠在edit.html.erb文件上傳新的照片

這是albumscontroller

class AlbumsController < ApplicationController 
    before_action :authenticate_user! 

這些控制器動作

 def index 
    @albums = current_user.albums.all 
    end 

     def show 
     @album = current_user.albums.find(params[:id]) 

     end 

    def new 
    @album = current_user.albums.new 
    @album.photos.new 
    3.times { @album.photos.build } 
    end 

    def edit 
    @album = current_user.albums.find(params[:id]) 

    end 

    def create 
    @album = current_user.albums.build(album_params) 

    if @album.save 
    redirect_to action: 'index' 
    else 
    render 'new' 
    end 
    end 

    def update 
    @album = current_user.albums.find(params[:id]) 

    if @album.update(album_params) 
    @album.save 

    redirect_to action: 'show' 
    else 
    render 'edit' 
    end 
    end 


    def destroy 
    @album = current_user.albums.find(params[:id]) 
    @album.destroy 
    redirect_to action: 'index' 

    end 


     private 
    def album_params               
    params.require(:album).permit(:title,:description 
       photos_attributes[:id,:avatar,:_destroy]) 
     end 

    end 

這是創作新專輯的new.html.erb文件

  <h1>New Album</h1> 

    <%= form_for @album, as: :album, url: user_albums_path, multipart: true 

    do |f| %> 
    <p> 
    <%= f.label :title %><br> 
    <%= f.text_field :title %> 
    </p> 

    <p> 
    <%= f.label :description %><br> 
    <%= f.text_area :description %> 
    </p> 

用於照片上傳

 <p> 
     <%= f.fields_for :photos do|i| %> 
     <%= i.file_field :avatar %> 
     <% end %> 
     </p> 
     <p> 
     <%= f.hidden_field :user_id, value: current_user.id %> 
     <%= f.submit %> 
     </p> 
     <% end %> 

這正是我已創建編輯視圖edit.html.erb

   <h1> Edit Your Album </h1> 

這是表單編輯相冊

<%= form_for @album, as: :album, :url=> {:controller => "albums",:action 

    => "update" }, method: :put do |f| %> 
    <p> 
    <%= f.label :title %><br> 
     <%= f.text_field :title %> 
     </p> 

     <p> 
     <%= f.label :description %><br> 
     <%= f.text_area :description %> 
     </p> 

     <p> 
     <table style="width:100%"> 
    <tr> 
     <td> 
     <% for photo in @album.photos %> 
     <%= image_tag photo.avatar_url.to_s %> 
     <% end %> 
     </td> 
     </tr> 
    <tr> 
     <td> 
    <%= f.fields_for :photos do |builder| %> 

     <%= builder.check_box :_destroy %> 
     <%= builder.label :_destroy, "remove" %> 
     <% end %> 
     </td> 
     </tr> 
     </table> 
     </p> 
     <h3>Update</h3> 
     <p> 
     <%= f.fields_for :photos do|i| %> 
     <%= i.file_field :avatar %> 
     <% end %> 
    </p> 


     <p> 
     <%= f.hidden_field :user_id, value: current_user.id %> 
     <%= f.submit %> 
     </p> 


     <% end %> 




     <%= link_to 'Back',user_albums_path %> 

這是album.rb我已經定義了嵌套屬性並銷燬屬性。 這個模型與用戶模型有很多關聯。

 class Album < ActiveRecord::Base 

     has_many :photos, :dependent => :destroy 
     belongs_to :user 
     accepts_nested_attributes_for :photos, allow_destroy: true, 

     :update_only =>true 
     end 

這就是我定義摩一名稱爲Avatar使用carreirwave 創建上傳這種模式已經有很多唱片協會

  class Photo < ActiveRecord::Base 
      mount_uploader :avatar, AvatarUploader 
      belongs_to :album 

      end 

請告訴我怎樣才能上傳照片模式photo.rb文件編輯動作期間的新照片

回答

0

您是否在編輯動作中嘗試過3.times { @album.photos.build },就像AlbumController中的新動作一樣?

+0

它適合我 –

0

您錯過了multipart: true您的編輯窗體。