为了解决Shrine image preview doesn't appear in nested form 我想在嵌套表单对象中使用照片模型,
貌似,导轨无法识别嵌套的窗体对象中的照片模型
blog_form.rb:
class BlogForm
include activeModel::Model
attr_accessor :title,:content,:user_id,:photos
def blog_builder
@user = User.find(user_id)
@blogs = @user.blogs.create(title: title,content: content )
end
concerning :PhotosBuilder do
attr_reader :photos_attributes
def photos
@photos ||= Photo.new
end
def photos_attributes=(attributes)
@photos ||= Photo.new(attributes)
end
end
def build_association
@blogs.photos << @photos if photos?
@user.photos << @photos if photos
end
def save
return false if invalid?
blog_builder
@blogs.save
@photos.save if @photos != nil
build_association
end
def photos?
return true if @photos != nil
end
end
blogs_controller:
def new
@user = params[:user_id]
@blog_form = BlogForm.new
debugger
end
def create
debugger
@blog_form = BlogForm.new(add_params) if has_a_tags? == true
@blog_form = BlogForm.new(blog_form_params)
if @blog_form.save
redirect_to user_blogs_path
else
#False action
end
end
def blog_form_params
params.require(:blog_form).permit(:user_id,:title,:photos_attributes =>[:image,:id,:destroy])
end
form.html.erb:
<%= form_with model: @blog_form,url: user_blogs_path,local: true do |f| %>
....
<div class ="field form-group">
<%= f.fields_for :photos,Photo.new do |photos_fileds| %>
<%= photos_fileds.label :image,class: "form-control" %>
<%= photos_fileds.hidden_field :image,class: "upload-data",value:
photos_fileds.object.cached_image_data %>
<%= photos_fileds.file_field :image,class: "form-control ",id: "select-files"%><br/>
<div class="image-preview">
<img id="image" src="<%= photos_fileds.object.image_url(:medium) %>" height="300" class="rounded" >
</div>
<% end %>
这些是代码显示文件上传按钮,phoos model can appear
但是我更改了一些代码
before:
<%= f.fields_for :photos,Photo.new do |photos_fileds| %>
之后:
<%= f.fields_for :photos,@blog.photos do |photos_fileds| %>
当我发送blog_form创建动作时, 我可以做照片实例
[16,23] in /home/master/prot/prottype2/app/controllers/blogs_controller.rb
16:
17: def create
18: debugger
=> 19: @blog_form = BlogForm.new(add_params) if has_a_tags? == true
20: @blog_form = BlogForm.new(blog_form_params)
21:
22: if @blog_form.save
23: redirect_to user_blogs_path
(byebug) @blog_form = BlogForm.new(blog_form_params)
#<BlogForm:0x000056396231ff78 @user_id="5",@title="",@content="",@photos=#<Photo id: nil,image_data: "{\"id\":\"54630213ca14bfafb07d289f313a62d6.jpeg\",\"sto...",blog_id: nil,user_id:
nil,created_at: nil,updated_at: nil>> (byebug) @blog_form.photos
#<Photo id: nil,blog_id:
nil,user_id: nil,updated_at: nil>
(byebug) @blog_form.photos.image
#<ImageUploader::UploadedFile storage=:cache id="54630213ca14bfafb07d289f313a62d6.jpeg" metadata=
{"filename"=>"index.jpeg","size"=>7376,"mime_type"=>"image/jpeg"}>
(byebug)