【问题标题】:Multiple image upload using nested forms in rails 4在 Rails 4 中使用嵌套表单上传多张图片
【发布时间】:2016-02-04 21:39:07
【问题描述】:

我正在开发一个设计用户上传许多图像的项目。所以我想要实现的是用户上传带有描述的图像,然后可以单击“添加另一个”按钮,该按钮允许用户添加另一个图像和描述,用户可以添加任意数量的图像他们想要.

有人可以为我指明正确的方向吗?

【问题讨论】:

  • 从与 Rails 相关的更基本的东西开始,然后从那里开始工作。 railscasts.com 是一个很好的资源。

标签: ruby-on-rails devise


【解决方案1】:

您需要使用accepts_nested_attributes_for,这是在提交中包含嵌套属性的标准功能:

#app/models/project.rb
class Project < ActiveRecord::Base
   has_many :images
   accepts_nested_attributes_for :images, reject_if: :all_blank, allow_destroy: true
end

虽然 - 严格来说 - 您想要的功能是向提交添加多个元素 (images#new),但 Rails 一次只能处理一个记录创建。使用以下内容会更有益:

#config/routes.rb
resources :projects #-> url.com/projects/:id/edit

#app/controllers/projects_controller.rb
class ProjectsController < ApplicationController

   def new
      @project = Project.new
      @project.images.build
   end

   def edit
      @project = Project.find params[:id]
   end

   def update
      @project = Project.find params[:id]
      @project.update project_params
   end

   private

   def project_params
     params.require(:project).permit(:x, :y, images_attributes: [:attachment])
   end
end

#app/views/projects/new.html.erb
<%= render "form", locals: { project: @project } %>

#app/views/projects/edit.html.erb
<%= render "form", locals: { project: @project } %>

#app/views/projects/_form.html.erb
<%= form_for project do |f| %>
   <%= f.text_field :x %>
   <%= f.text_field :y %>
   <%= f.fields_for :images do |i| %>
      <% if i.object.new_record? %>
        <%= f.file_field :attachment %>
      <% else %>
        <%= image_tag i.object.attachment.url %>
        <%= i.check_box :_destroy %>          
      <% end %>
   <% end %>
   <%= f.submit %>
<% end %>    

上面应该给你一个@project 的表格,里面有嵌入的图像。


要添加“额外”字段,最好查看 cocoon gem 或此 Railscast:Nested Forms part 1

【讨论】:

  • 我开始将它合并到我的项目中,它似乎进展顺利,期待,我正在使用 wicked gem 进行多页登录,在输入注册详细信息后,用户输入更多详细信息他们自己,但使用 rails 4,我们有强大的参数,并且 cocoon gem 传递不同的参数,如 model_attributes: [:id, :Name, :mname, :name, :done, :_destroy],当传递到wicked_controller.rb,我发布了一个关于这个的问题:stackoverflow.com/questions/35270729/…
  • 让我看一下,我之前没有使用过邪恶的宝石,所以我可能需要做一些阅读
  • 您的嵌套表单第 1 部分的链接转到 Daily Caller。一些新闻文章
  • 不知道为什么会这样 - 它最初是 Railscasts 的链接。
猜你喜欢
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 2016-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-04
  • 2020-03-23
相关资源
最近更新 更多