форма проверки с вложенными моделей в Rails

Обновить

November 2018

Просмотры

50 раз

1

У меня есть эта проблема. Мне нужно, чтобы проверить атрибуты двух моделей в том же виде, в Rails. Одним из них является родителем другого.

Форма, как это:

<%= semantic_form_for @professional do |pro| %>
       <%= pro.inputs :id => "information" do %>
          <%= pro.input :name, label: t("Artistic Name") %>
         <%= pro.semantic_fields_for @user do |user| %>

         <%= user.inputs :id => "register" do %>

            <%= user.input :email, :placeholder=>"[email protected]" %>

           <%= user.input :password, label: t('Password') %>

          <%end%>

       <% end %>

   <% end %>

<% end %>

Модели, которые я использую, как это:

Пользователь:

class User < ActiveRecord::Base
  belongs_to :role, polymorphic: true
  validates  :email, :password, presence: true

end

Профессионалы:

class Professional < ActiveRecord::Base
 has_one :user, as: :role, dependent: :destroy

 accepts_nested_attributes_for :user

   validates  :date_birthday, :gender, :height, :name, :description, :Weight, :address, :languages,:services, :category, :phonenumber, :fullname, :hair_color, :age, :orientation, presence: true

end

Так в чем проблема?

Когда я нажал на кнопку отправки профессиональные атрибуты помечаются, но атрибуты не пользователи.

Как это:

введите описание изображения здесь

Поля, отмеченные красным цветом, относится к профессиональной модели, но поля электронной почты и пароль принадлежит к пользовательской модели не отмеченные красным цветом, когда оно должно быть, потому что они пусты.

Что я могу сделать? Мне нужно предупредительное сообщение для пользователя атрибутов слишком

Благодаря авансов.

2 ответы

0

You need to tell Professional to validate the associated User:

class Professional < ActiveRecord::Base
    ... 
    validates_associated :user
1

We've achieved what you need before.

We had to use inverse_of so that the object was a singular piece of data (rather than multiple pieces as is the case by default):

#app/models/user.rb
class User < ActiveRecord::Base
  belongs_to :role, polymorphic: true, inverse_of: :user
  validates  :email, :password, presence: true
end

#app/models/professional.rb
class Professional < ActiveRecord::Base
  has_one :user, as: :role, dependent: :destroy, inverse_of: :role
  accepts_nested_attributes_for :user
end

This will help.

You also need to make sure you're passing these objects correctly (I see so many people not doing this).