Activeadmin создание новых ассоциаций author_to в форме

имея эти примеры моделей:

class Post < ActiveRecord::Base
  belongs_to :category
end

class Category < ActiveRecord::Base
  has_many :posts
end

Представьте, что у меня есть форма для создания новых сообщений, по умолчанию я получаю выбор со списком доступных категорий, но что, если я хочу создать новые категории из формы «новый/отредактировать сообщение»?

Было бы идеально иметь кнопку с полем выбора, которое открывает всплывающее окно для создания новой категории.

Это лучше, чем создать новую категорию, а затем создать новый пост.

То, что я всегда видел, это создание ассоциаций has_many, но не created_to one.

Спасибо


person Jesus Rodriguez    schedule 27.07.2012    source источник


Ответы (1)


Я думаю, вы как бы задаете пару вопросов здесь. Я собираюсь сказать, что более важным является то, как создать ассоциацию в противоположном направлении от того, как она обычно строится (потому что я знаю, как ответить). Я сосредоточусь на этом.

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

= label_tag :new_category_name
= text_field_tag :new_category_name

Затем в вашем контроллере вы можете создать новую категорию следующим образом.

@post.build_category(name: params[:new_category_name])

Если вы сохраняете свой @post обычным способом, то категория будет создана в той же транзакции, что и сообщение, поэтому, если это не удастся, категория не будет создана. Если вы хотите сохранить категорию независимо от того, что вы можете вместо этого назвать @post.create_category.

Вот документация: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

В таблице Связи в единственном числе (один к одному) замените other названием вашей модели.

Другой вопрос, который я думаю, заключается в том, как сделать так, чтобы это выглядело хорошо в представлении. У вас наверняка есть варианты, как сделать так, чтобы это выглядело хорошо. Вы можете создать всплывающее окно, как вы предложили. Вы также можете использовать AJAX для отправки небольшого запроса xhr. Я тоже видел причудливую комбинацию выбора / текстовых полей.

person Geoff    schedule 04.12.2012