我正在使用devise进行身份验证。用户可以拥有多张专辑。我有专辑控制器和view.i有照片模式。
协会是用户可以有很多专辑,专辑可以有很多照片。 我正在使用表格照片的嵌套属性。使用载波进行照片上传。我可以在创建新相册时在new.html.erb视图中上传新照片。 能够在edit.html.erb视图中删除和更新照片。但我无法在edit.html.erb文件中上传新照片
这是专辑控制器
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
这是照片模型的photo.rb文件,其中我定义了使用carreirwave创建的命名头像的mount uploader 这个模型与专辑有很多联系
class Photo < ActiveRecord::Base
mount_uploader :avatar, AvatarUploader
belongs_to :album
end
请告诉我如何在编辑操作期间上传新照片
答案 0 :(得分:0)
您是否在编辑操作中尝试了3.times { @album.photos.build }
,就像AlbumsController中的新操作一样?
答案 1 :(得分:0)
您在修改表单中遗漏了multipart: true
。