두 개의 has_one
연관이있는 MediaItem 모델이 있습니다. 나에게 양식이 렌더링되는 다음과 같은 오류 개체를 제공중첩 된 연결에 대해 이러한 오류가 렌더링되지 않는 이유는 무엇입니까?
validates_presence_of :photo, allow_nil: true
validates_presence_of :video, allow_nil: true
validate :photo_or_video_present
def photo_or_video_present
if !(photo.blank?^video.blank?)
errors['photo_attributes.image'] << 'Select a photo or a video'
errors['video_attributes.uid'] << 'Select a photo or a video'
end
end
:
<ActiveModel::Errors:0x007f99c8a71fc0
@base=#<MediaItem id: nil,
title: "asdadasdasd",
slug: "asdadasdasd",
gallery_id: 1,
created_at: nil,
updated_at: nil>,
@messages={:"photo_attributes.image"=>["Select a photo or a video"],
:"video_attributes.uid"=>["Select a photo or a video"],
:title=>[] }>
그러나 이러한 오류는 중첩 된 모델에 표시되지 않는 나는 하나 또는 다른 사용하고 있는지 확인 . 양식은 다음과 같습니다
<div class="FormWrapper">
<%= simple_form_for [:admin, @gallery, @media_item], html: { class: "#{action_name.titleize}PhotoForm" } do |f| %>
<%= f.input :title %>
<div class="PhotoInputs">
<h3>Photo</h3>
<%= f.simple_fields_for :photo do |ff| %>
<%= ff.input :image, as: :file_upload, input_html: {preview: @media_item.photo.image} %>
<% end %>
</div>
<div class="VideoInputs">
<h3>Video</h3>
<%= f.simple_fields_for :video do |ff| %>
<%= ff.input :provider, as: :radio_buttons, collection: Video::PROVIDERS %>
<%= ff.input :uid %>
<% end %>
</div>
<hr>
<%= render partial: 'shared/form_submit', locals: {resource: @media_item} %>
<% end %>
</div>
왜 이러한 인라인 오류를 표시하는 실패?
참고 : 양식의 기능에는 문제가 없습니다. 문제없이 모델과 중첩 모델을 모두 만들고 편집 할 수 있습니다. 당신이 존재를 확인하는하지만이 존재하지 않을 수 있기 때문에
고마워. 이 예제에서는 MediaItem을 크게 단순화했습니다. 비디오와 사진 모두에서 공유되는 다른 많은 기능을 가지고 있으며 다형성을 좋지 않게 만드는 방식으로 다른 모델과 연결됩니다. 인라인 오류가 발생하는 한 Simple 양식을 사용하면 해당 속성과 관련된 모든 MediaItem 오류에 대한 인라인 오류가 즉시 제공되므로 인라인 오류 구현을 보지 못했다고 할 때 구체적으로 설명합니다. 중첩 모델에 대한 인라인 오류에 대해 이야기하고 있습니까? – Undistraction
@Pedr 예이 구현 된 인라인 오류는 부모가 아닌 중첩 모델에서 유효성 검사가 수행 된 경우에만 발생했습니다. 디자인 때문에 중첩 모델에 대한 유효성 검사를 수행 할 수 없기 때문에 기본 오류 이외의 다른 방법에 대한 최선의 방법은 확실하지 않습니다. – engineersmnky