Я просмотрел различные ответы на подобные вопросы и не совсем разобрал их. A wine
модель определена с has_one :register, :dependent => :destroy
и правильно или неправильно я добавил accepts_nested_attributes_for :register
. A register
определяется с помощью belongs_to :wine
.Рельсы, заполнив базу данных ассоциированными моделями на одной форме
Код в wines_controller.rb
для create
является:
def new
@wine = Wine.new
@register = Register.new
def create
@wine = Wine.new(wine_params)
@register = @wine.registers.build(register_params)
respond_to do |format|
if @wine.save
#success
else
format.json { render json: @wine.errors, status: :unprocessable_entity }
format.json { render json: @register.errors, status: :unprocessable_entity }
end
end
end
Моя форма для создания new wine
имеет следующий код:
<%= simple_form_for @wine do |f| %>
# various working elements
<div class="field">
<% f.fields_for :register do |r| %>
<%= r.label :short_name %>
<%= r.text_field :short_name %>
<%= r.label :barcode %>
<%= r.text_field :barcode %>
<% end %>
</div>
Когда эта форма называется вверх никакие поля не создаются из f.fields_for
но этот блок выполняется, потому что я могу добавить в него тестовые кнопки, чтобы доказать, что к нему обращаются.
Если я пытаюсь создать вино, я получаю следующее сообщение об ошибке:
undefined method `registers' for #<Wine:0x007f1204375330> Did you mean? register register= register_id
Я считаю, что использование .build
есть для обеспечения целостности данных: Я не хочу, чтобы создать wine
, который не имеет a соответствует register
. Я пробовал думать об этом вложенных атрибутах, но многие считают, что это плохой план. Этот текущий подход кажется правильным, но, по-моему, мне не хватает понимания синтаксиса.
На более позднем этапе необходимо будет установить другие модели, связанные с register
, которые не будут связаны с винами. Я рассматривал аналогичный подход, но я рад, что мне сказали переосмыслить!
ОК, спасибо за вход. Первая корректировка, которую вы предлагаете, порождает 'ActiveModel :: MissingAttributeError в WinesController # new' и' не может записать неизвестный атрибут 'wine_id'' – fatherdamo
Эта ошибка возникает, если я пытаюсь создать новую запись вина – fatherdamo
, вы могли бы прояснить ... мы говорим о '@wine.register = Register.new' строке? Если это так, проверьте свою регистрационную таблицу ... у нее должна быть ссылка wine_id – David