Rails: установите входные данные формы с отношением has_one

В моем приложении rails у меня есть связь между таблицей User (которая предназначена для целей аутентификации) и таблицей Store (которая содержит информацию о магазине, такую ​​как имя, описание и т. д.).

Я сопоставил две модели следующим образом:

  • Пользователь has_one :store

  • Магазин принадлежит : пользователю

На этапе регистрации мне нужно запросить как информацию для аутентификации (я использую Devise gem), такую ​​как адрес электронной почты и пароль, так и имя магазина. Это означает, что я хотел бы заполнить две связанные таблицы (User и Store), используя одну и ту же форму!

Как выглядит форма ERB (или Haml), особенно для части названия магазина?

Я пробовал это, но это не работает (точнее, строка с запросом имени магазина):

= form_for(resources, :as => resource_name, :url => registration_path(resource_name)) do |f|
    = f.text_field :store[:name]
    = f.email_field :email
    = f.password_field :password
    = f.submit "Create"

Заранее спасибо,


person htaidirt    schedule 27.08.2012    source источник


Ответы (1)


Вы можете использовать fields_for:

= f.fields_for :store do |store_field|
  = store_field.text_field :name

И в вашей модели пользователя:

accepts_nested_attributes_for :store
person Oscar Del Ben    schedule 27.08.2012
comment
Спасибо за помощь, Оскар, это работает наполовину! Когда я добавляю fields_for, создается ввод. Но когда я добавляю accepts_nested_attributes_for :store, ввод исчезает!! Я пробовал без accepts_nested_attributes, но получаю ошибку MassAssignment:/ - person htaidirt; 27.08.2012
comment
Возможно, вам придется заменить :store на @user.store - person Oscar Del Ben; 27.08.2012
comment
Проблема в том, что @user не существует, потому что это страница регистрации: @user и @store еще не существует! - person htaidirt; 28.08.2012
comment
Что такое ресурсы? Вам нужно иметь отношения в объекте, чтобы использовать fields_for. - person Oscar Del Ben; 28.08.2012
comment
Я наконец понял. Эта проблема была решена на следующей странице stackoverflow.com/questions /4307743/. Здесь гем Devise генерирует resources для аутентификации пользователя. - person htaidirt; 28.08.2012
comment
Большое спасибо, Оскар, за помощь. - person htaidirt; 28.08.2012