Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 多个具有多个多态关系返回错误_Ruby On Rails_Ruby On Rails 4_Activerecord - Fatal编程技术网

Ruby on rails 多个具有多个多态关系返回错误

Ruby on rails 多个具有多个多态关系返回错误,ruby-on-rails,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby On Rails 4,Activerecord,我认为“服务”和“形象”模型之间存在多态关系。将有多个模型与图像模型相关,但目前只有一个,所以这就是为什么“图像”模型是多态的。我还有4种不同的图像类型,所以我在“服务”模型中添加了4种有很多关系的图像。“服务”模型还添加了“接受:图像的嵌套属性” 因此,在_forms.html.erb中,我为FormHelper提供了两个不同的字段,每个字段都有不同的来源。但是每当我尝试创建一个新的时,我得到了“nil:NilClass的未定义方法[]”错误 以下是服务和图像模型: class Service

我认为“服务”和“形象”模型之间存在多态关系。将有多个模型与图像模型相关,但目前只有一个,所以这就是为什么“图像”模型是多态的。我还有4种不同的图像类型,所以我在“服务”模型中添加了4种有很多关系的图像。“服务”模型还添加了
“接受:图像的嵌套属性”

因此,在_forms.html.erb中,我为FormHelper提供了两个不同的
字段,每个字段都有不同的来源。但是每当我尝试创建一个新的时,我得到了
“nil:NilClass的未定义方法[]”
错误

以下是服务和图像模型:

class Service < ActiveRecord::Base
    has_many :images, as: :imageable, :dependent => :destroy
    has_many :images_title,-> {where "image_type = 2"}, as: :imageable, class_name: "Image", :dependent => :destroy
    has_many :images_icon,-> {where "image_type = 1"}, as: :imageable, class_name: "Image", :dependent => :destroy
    has_many :images_regular,-> {where "image_type = 3"}, as: :imageable, class_name: "Image", :dependent => :destroy

    accepts_nested_attributes_for :images


end

class Image < ActiveRecord::Base
    belongs_to :imageable, polymorphic: true

    mount_uploader :image, ImageUploader

    enum image_type: {icon: 1, title: 2, regular: 3, slider: 4}

end
_form.html.erb:

<div class="control-group">
   <%= f.simple_fields_for :images_title do |image| %>


     <div class="controls">
        <label class="control-label">Hizmet Büyük Resimi</label> 
        <div class="fileupload fileupload-new" data-provides="fileupload">
          <div class="fileupload-new thumbnail" style="width: 200px; height: 150px;">
            <% if image.object.nil? %>
              <img src="http://www.placehold.it/200x150/EFEFEF/AAAAAA&amp;text=no+image" alt=""/>
            <% else %>
              <%= image_tag image.object.image_url %>
            <% end %>
          </div>
          <div class="fileupload-preview fileupload-exists thumbnail" style="max-width: 200px; max-height: 150px; line-height: 20px;"></div>
          <div>
            <span class="btn btn-file"><span class="fileupload-new">Resim Seç</span><span class="fileupload-exists">Değiştir</span>
              <%= image.input :image, input_html: { type: :file, class: "default"}, wrapper: false, label: false %>
              <%= image.input :image_type, :as => "hidden", :input_html => { :value => :title } %>
            </span>
            <a href="#" class="btn fileupload-exists" data-dismiss="fileupload">Sil</a>
          </div>
        </div>


     </div>
   <% end %>
</div>

Hizmet Büyük Resimi
Resim SeçDeğiştir
“隐藏”,:输入\ html=>{:值=>:title}%>

服务被正确插入,但在嵌套属性中我得到了一个错误。所以我做错了什么吗?

我已经处理过很多多态关系,我已经做了您在这里尝试做的事情:您正在实例化多个“类型”的图像。我在我的博客中展示了如何使用枚举,这与您的图像类型字段是一样的

这篇博文涵盖了从控制器到表单的所有内容。在我的示例中,我将同一记录的四种不同类型实例化为表单中的嵌套属性。这样你就可以完成任务了

简单地说,您将要改变的是,您只需要为您的图像使用一条和多条线路。另一个主要问题是,您需要对通过表单上传的每个图像实例使用构建

<div class="control-group">
   <%= f.simple_fields_for :images_title do |image| %>


     <div class="controls">
        <label class="control-label">Hizmet Büyük Resimi</label> 
        <div class="fileupload fileupload-new" data-provides="fileupload">
          <div class="fileupload-new thumbnail" style="width: 200px; height: 150px;">
            <% if image.object.nil? %>
              <img src="http://www.placehold.it/200x150/EFEFEF/AAAAAA&amp;text=no+image" alt=""/>
            <% else %>
              <%= image_tag image.object.image_url %>
            <% end %>
          </div>
          <div class="fileupload-preview fileupload-exists thumbnail" style="max-width: 200px; max-height: 150px; line-height: 20px;"></div>
          <div>
            <span class="btn btn-file"><span class="fileupload-new">Resim Seç</span><span class="fileupload-exists">Değiştir</span>
              <%= image.input :image, input_html: { type: :file, class: "default"}, wrapper: false, label: false %>
              <%= image.input :image_type, :as => "hidden", :input_html => { :value => :title } %>
            </span>
            <a href="#" class="btn fileupload-exists" data-dismiss="fileupload">Sil</a>
          </div>
        </div>


     </div>
   <% end %>
</div>