Ruby on rails 多个具有多个多态关系返回错误
我认为“服务”和“形象”模型之间存在多态关系。将有多个模型与图像模型相关,但目前只有一个,所以这就是为什么“图像”模型是多态的。我还有4种不同的图像类型,所以我在“服务”模型中添加了4种有很多关系的图像。“服务”模型还添加了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
“接受:图像的嵌套属性”
因此,在_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&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&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>