Я не могу получить свою запись CheckIn для сохранения, поскольку связанная с ней аренда не сохраняется.Rails/ActiveRecord - ассоциация, не сохраняющая
У меня есть три модели с ассоциациями:
class Property < ApplicationRecord
has_many :tenancies
end
class Tenancy < ApplicationRecord
belongs_to :property
has_many :check_ins
end
class CheckIn < ApplicationRecord
belongs_to :tenancy
accepts_nested_attributes_for :tenancy
end
Я хочу фиксирование нового действия для создания как фиксирования и связанного с ним Tenancy:
def new
@check_in = CheckIn.new
@check_in.build_tenancy.property_id = params[:property_id]
end
Я должен включать PROPERTY_ID часть иначе Аренда не спасет.
Форма в check_ins/new.html.erb:
<%= form_for @check_in, url: property_check_ins_path do |f| %>
<%= f.label :date_time %>
<%= f.datetime_select :date_time, {minute_step: 15} %>
<%= f.label :tenancy %>
<%= f.fields_for :tenancy do |i| %>
<%= i.date_select :start_date %>
<% end %>
<%= f.submit "Create Check In" %>
<% end %>
Я добавил аренды атрибутов сильного Params в CheckInsController:
def check_in_params
params.require(:check_in).permit(:tenancy_id, :date_time, tenancy_attributes: [:start_date])
end
Стоит отметить, что в check_ins маршруты являются вложенными в свойствах:
resources :properties do
resources :check_ins, only: [:new, :create]
end
Так что проблема в том, что к тому времени, когда я получу для создания действия в CheckInsController, аренда, которую я построил, исчезла. Я не уверен, как и когда каждая из записей должна быть сохранена, а небольшая сложность того, что я пытаюсь достичь, затрудняет поиск соответствующей помощи, поэтому любые идеи?
Я использую Rails 5.
Вы добавили 'tenancy_attributes' в strong_params –
У меня есть, я добавил, что в исходный вопрос, спасибо –
А, я просто понял, что у меня нет: tenancy_id в разрешенных параметрах .. но тогда я положил он в и он по-прежнему не спасает –