使用carrier_wave和嵌套表单的Rails - 如何保存嵌套属性

时间:2014-05-13 16:49:38

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

我有一个模型用户,它嵌入了照片(与carrier_wave_direct一起使用)。在photo.rb模型中,我添加了一个字段描述。 这是photo.rb(carrier_wave_direct):

class Photo
  include Mongoid::Document
  include Mongoid::Timestamps

  embedded_in :user

  mount_uploader :file, ImageUploader
  field :file, type: String
  field :description, type: String
end

这是user.rb:

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

这是users_controller.rb:

def create
  @user = users.build(user_params)
  if @user.save
    @user.photos.each do |photo|
      unless photo.file.file == nil
        photo.save!
      end  
    end
  else
    render :new
  end
end

def update
  if @user.update_attributes(user_params)
  @user.photos.each do |photo|
    unless photo.file.file == nil
      photo.save!
    end  
  end
...
end

def user_params
  params.require(:user).permit(
    :photos_attributes => [:id, :description, :file, :_destroy]
  )
end

我可以在控制台中看到启动参数具有来自表单的正确输入的字段描述,但我无法保存它。照片很好保存。 表格:

<%= f.fields_for :photos do |photo_f| %>
  <%= render partial: 'photo_fields', locals: { f: photo_f } %>
  <%= link_to_add_association raw('<i class="fi-plus">&nbsp; add a photo</i>'), f, :photos %>
<% end %>

在部分嵌套字段中:

<div class="nested-fields">
  <% if f.object.file.to_s.empty? %>
    <%= f.file_field :file, label: "Upload a photo." %>
  <% else %>
    <%= image_tag f.object.file %>
  <% end %>
  <%= f.input :description, label: false, as: :text %>
</div>

我真的不知道如何将描述字段保存到模型中,它在params中传递,我在控制台中看不到任何错误消息。在show视图中,如果我对用户执行.inspect,则说明字段为nil(因为它无法保存)

0 个答案:

没有答案