Rails回形针试图将照片添加到具有关系的模型中

时间:2014-03-23 23:04:36

标签: ruby-on-rails ruby

我有一个模型产品,我希望能够添加多张照片。所以我得到了回形针宝石,因为我想要多张照片,我制作了另一张名为Photos的桌子,与我的产品型号有一对多的关系。通过这种方式,我可以在照片表中分配多个记录,每个记录都有一个回形针附件,每个记录都引用一个产品。

但我似乎无法使我的上传图像功能起作用,甚至没有任何东西保存到数据库中。我编辑它时,每个其他字段都会更新,但没有任何内容保存到照片表中。我错过了什么?相关代码如下:

模型

class Product < ActiveRecord::Base
  has_many :photos

end
class Photo < ActiveRecord::Base
  belongs_to :product
  has_attached_file :image
end

产品控制器

def index
    @products = Product.all
    @product = Product.new
  end

def update

    @product = Product.find(params[:id])
    if @product.update_attributes(product_params)
      respond_to do |format|
        format.js
        format.html { redirect_to products_url }
      end
        else
          respond_to do |format|
            format.js
            #format.html { render action : "edit" }
          end
        end
end

查看

<% for product in @products %>

<%= simple_form_for product, :html => { :method => 'put', :multipart => true} do |f| %>
    <%= token_tag form_authenticity_token %>
    <div class="row">
      <div class="large-12 columns">
        <%= product.photos.each do |photo| %>
            <%= image_tag photo.image.url %>
        <% end %>
      </div>
    </div>
    <div class="row">
      <div class="large-12 columns">
        <%= f.input :name, :input_html => {:value => product.name} %>
      </div>
    </div>
    <div class="row">
      <div class="large-6 columns">
        <%= f.association :category, :selected => product.category.id %>
      </div>
      <div class="large-6 columns">
        <%= f.input :price, :input_html => {:value => product.price}%>
      </div>
    </div>
    <div class="row">
      <div class="large-12 columns">
        <%= f.input :short_description, :input_html => {:value => product.short_description} %>
      </div>
    </div>
    <div class="row">
      <div class="large-6 columns">
        <%= fields_for :photos do |f_i| %>
            <%= f_i.file_field :image %>
        <% end %>
      </div>
      <div class="large-6 columns">
        <%= f.button :submit %>
      </div>
    </div>


<% end %>
<% end %>

2 个答案:

答案 0 :(得分:0)

您只需在产品型号中添加此行。

accepts_nested_attributes_for :photos

这将有效。

答案 1 :(得分:0)

我明白了。我有几件事情错了(现在都纠正了,而且工作正常.IIRC这些是我遇到的主要问题:

  1. 缺少accepts_nested_attributes_for:照片(如上所述)
  2. 不使用simple_fields_for(因为我使用的是简单形式的宝石)
  3. 缺少validates_attachment_content_type:image,:content_type =&gt; 我照片模型中的[“image / jpg”,“image / jpeg”,“image / png”] (提交成功时必须禁用此功能 作为另一种选择
  4. 我需要在products控制器中构建我的关联对象 像这样:@ products.each do | item | item.photos.build
  5. 不得不将product_params更改为:(不要以为我给了 这里的原始代码,我稍后会收紧许可证) params.require(:产物)!.permit
  6. 认为那是主要的东西。谢谢你的帮助。