Ich kann meinen CheckIn-Datensatz nicht speichern, weil die zugehörige Tenancy nicht gespeichert wird.Rails/ActiveRecord - Verknüpfung wird nicht gespeichert
Ich habe drei Modelle mit den Verbänden:
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
ich die CheckIn neue Aktion wollen sowohl die CheckIn und das dazugehörige Tenancy zu erstellen:
def new
@check_in = CheckIn.new
@check_in.build_tenancy.property_id = params[:property_id]
end
ich den property_id Teil umfassen müssen ansonsten die Mieter wird nicht speichern.
Die Form, in 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 %>
Ich habe hinzugefügt Mietverhältnis Attribute den starken params in den CheckInsController:
def check_in_params
params.require(:check_in).permit(:tenancy_id, :date_time, tenancy_attributes: [:start_date])
end
Es ist erwähnenswert, dass die check_ins Routen sind in Eigenschaften verschachtelt:
resources :properties do
resources :check_ins, only: [:new, :create]
end
Also das Problem ist, dass bis ich komme Zu der Erstellungsaktion im CheckInsController ist die von mir erstellte Pacht verschwunden. Ich bin mir nicht sicher, wie und wann jede der Aufzeichnungen gespeichert werden sollte und die leichte Komplexität dessen, was ich erreichen möchte, hat es ziemlich schwierig gemacht, relevante Hilfe zu finden, also irgendwelche Ideen?
Ich bin mit Rails 5.
Haben Sie 'tenancy_attributes' in strong_params hinzugefügt –
Ich habe, fügte ich das in der ursprünglichen Frage, danke –
Ah, ich habe gerade festgestellt, dass ich nicht: tenancy_id in den zulässigen params .. aber dann habe ich es in und es spart immer noch nicht –