form_for编辑操作的错误

时间:2014-10-30 06:00:20

标签: ruby-on-rails strong-parameters nested-form-for cocoon-gem

galleries_controller.rb

def create
    @gallery = Gallery.new(gallery_params)
      if @gallery.save
          redirect_to @gallery, notice: 'Gallery was successfully created'
        else
          render 'new'
        end
    end

def update
    if @gallery.update(gallery_params)
      redirect_to @gallery, notice: 'Gallery updated'
    else
      render 'edit'
    end
end

def gallery_params
    params.require(:gallery).permit(:title, :description, :image, photos_attributes: [:id, :image, :_destroy])
end

_form.html.erb

<div class="form-group">
    <%= f.fields_for :photos do |photo| %>  
        <% if photo.object.new_record? %>
        <%= render partial: 'photo_fields', locals: {f:f} %>
        <% end %>
    <% end %>   
        <%= link_to_add_association 'Add photo', f, :photos %>
</div>

_photo_fields.erb

<div class="nested-fields">
  <%= f.file_field :image, class: "add-image-field" %>
  <%= link_to_remove_association "Remove", f %>

gallery.rb

class Gallery < ActiveRecord::Base
  has_many :photos, dependent: :destroy

  accepts_nested_attributes_for :photos,
                                reject_if: proc { |attributes| attributes['image'].blank? },
                                :allow_destroy => true

  validates :title, :description, presence: true

photo.rb

class Photo < ActiveRecord::Base
  belongs_to :gallery

  has_attached_file :image

问题是,我可以通过此表单创建新照片,但是当我尝试编辑它们时,我得到了 未定义的局部变量或方法`f'。

修改  本地人的解决方案有助于升级,但仍然无法顺利运行代码。我编辑了我的代码,因此我可以看到当前上传的照片,并添加了一个复选框来删除所选照片。但我得到了不允许的参数:尝试这样做时出现了_destroy错误。 也: 当我尝试将新照片添加到现有图库时,我在GalleriesController#update中获得ActiveRecord :: UnknownAttributeError。在创建包含多张照片的新图库时,一切正常。 它与当前上传的图片有关,我创建了一个没有照片的图库,我可以毫无问题地将它们添加到编辑动作中。

 "image"=>#<ActionDispatch::Http::UploadedFile:0x007f6b174119d0 @tempfile=#<Tempfile:/tmp/RackMultipart20141030-3930-zycejb>,
     @original_filename="8e16b83685ab70a561d1facae3a023da.jpg",
     @content_type="image/jpeg",
     @headers="Content-Disposition: form-data; name=\"gallery[image]\"; filename=\"8e16b83685ab70a561d1facae3a023da.jpg\"\r\nContent-Type: image/jpeg\r\n">,
     "_destroy"=>"0",
     "photos_attributes"=>{"0"=>{"id"=>"8"},
     "1"=>{"id"=>"9"}}},
     "commit"=>"Update gallery",
     "id"=>"21"}

因为我没有直接在这里发布图片的声誉,所以我粘贴了我的编辑页面当前看起来如何看的链接:http://s13.postimg.org/3o8uvansn/Screenshot_from_2014_11_01_12_55_17.jpg

快速编辑:似乎我修复了更新问题。这一行

<% if photo.object.new_record? %> 
_form.html.erb中的

允许我上传新图片。删除时未经许可的参数的问题仍然存在。

link_to_remove_association

仅删除用于pic上传的新文件字段,它不会删除已上传的图片。

0 个答案:

没有答案