【问题标题】:Rails 4: Duplicated file_field input on Nested FormRails 4:嵌套表单上的重复文件字段输入
【发布时间】:2015-10-17 14:08:54
【问题描述】:

我有一个模特“帖子”和一个模特“照片”。模型帖子具有从照片中的嵌套形式,以上传具有关联的图像。上传工作正常,但每次我去编辑帖子时,我都会为每张上传的图片添加一个新输入,并为上传一张新图片添加一个输入。我只想输入上传新文件并隐藏或不加载其他文件。

这是我的代码:

<%= f.fields_for :photos do |photo| %>
  <%= photo.file_field :image, class: "form-control"  %>
<% end %>

控制器:

module Admin
  class SeminovosController < SuperAdminController
    before_action :set_seminovo, only: [:show, :edit, :update, :destroy]

    # GET /seminovos
    # GET /seminovos.json
    def index
      @seminovos = Seminovo.all
      @seminovo = Seminovo.new
      @seminovo.photos.build
      #expires_in 3.hours, :public => true, 'max-stale' => 0
    end

    # GET /seminovos/1
    # GET /seminovos/1.json
    def show
    end

    # GET /seminovos/new
    def new
      @seminovo = Seminovo.new
      @seminovo.photos.build
      @seminovo.photos
    end

    # GET /seminovos/1/edit
    def edit
      @seminovo.photos.build
      @seminovo.photos
    end

    # POST /seminovos
    # POST /seminovos.json
    def create
      #@seminovo = Seminovo.new(seminovo_params)

      respond_to do |format|
        @seminovo = Seminovo.new(seminovo_params)
        @seminovo.save
        format.html { redirect_to @seminovo }
        format.js

       # if @seminovo.save
       #   format.html { redirect_to @seminovo, notice: 'Seminovo was successfully created.' }
       #   format.json { render :show, status: :created, location: @seminovo }
       # else
       #   format.html { render :new }
       #   format.json { render json: @seminovo.errors, status: :unprocessable_entity }
       # end
      end
    end

    # PATCH/PUT /seminovos/1
    # PATCH/PUT /seminovos/1.json
    def update
      respond_to do |format|
        if @seminovo.update(seminovo_params)
          format.html { redirect_to @seminovo, notice: 'Seminovo was successfully updated.' }
          format.json { render :show, status: :ok, location: @seminovo }
        else
          format.html { render :edit }
          format.json { render json: @seminovo.errors, status: :unprocessable_entity }
        end
      end
    end

    # DELETE /seminovos/1
    # DELETE /seminovos/1.json
    def destroy
      @seminovo.destroy
      respond_to do |format|
        format.html { redirect_to seminovos_url, notice: 'Seminovo was successfully destroyed.' }
        format.json { head :no_content }
      end
    end

    private
      # Use callbacks to share common setup or constraints between actions.
      def set_seminovo
        @seminovo = Seminovo.friendly.find(params[:id])
      end

      # Never trust parameters from the scary internet, only allow the white list through.
      def seminovo_params
        params.require(:seminovo).permit(:name, :price, :marca_id, :tipo_id, :ano_modelo, 
                                         :portas, :km_rodados, :combustivel, :placa, :cor, :desc, 
                                         :video, :destaque, :photo_id, :slug, 

                                         photos_attributes: [ :id, :image, :image_uid, :image_name, :desc,
                                         :seminovos_id, :_destroy ])
      end
  end
end

【问题讨论】:

  • 你能显示你周围的代码吗?你是在遍历所有照片然后调用每张照片上显示的代码吗?
  • 你能分享控制器的def编辑吗?我们可能还需要查看更多表单。
  • 添加控制器

标签: ruby-on-rails ruby ruby-on-rails-4 nested-forms


【解决方案1】:

删除 @seminovo.photos.build @seminovo.photos

来自新建和编辑操作。

然后替换

<%= f.fields_for :photos do |photo| %>
  <%= photo.file_field :image, class: "form-control"  %>
<% end %>

<%= f.fields_for :photos, @seminovo.photos.new do |photo| %>
  <%= photo.file_field :image, class: "form-control"  %>
<% end %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 2016-02-03
    相关资源
    最近更新 更多