Я действительно пытаюсь понять, как создать вложенную форму с моделью, соединенной второй моделью. Я искал numberofposts на SO, и попробовал много подходов, но не могу понять, хотя я думаю, что я почти там.Rails вложенные формы с has_one через отношения
Я пытаюсь создать подписку, клиент и адрес клиента в одной форме, но до сих пор мне удалось создать подписку и клиент. У меня проблемы с адресом.
клиент может иметь много подписок, но только один адрес (за данное время, во всяком случае)
Мой (сокращенный) код выглядит следующим образом:
subscription.rb
class Subscription < ActiveRecord::Base
belongs_to :customer
has_one :address, through: :customer
accepts_nested_attributes_for :customer, :address
attr_accessible :customer_attributes, :address_attributes
customer.rb
class Customer < ActiveRecord::Base
has_one :address
has_many :subscriptions
accepts_nested_attributes_for :address
attr_accessible :address_attributes
address.rb
class Address < ActiveRecord::Base
belongs_to :customer
has_many :subscriptions, through: :customer
subscriptions_controller.rb
def new
@subscription = Subscription.new
customer = @subscription.build_customer
address = customer.build_address
subscription_line_items = @subscription.subscription_line_items.build
end
подписки/_form.html.erb
<%= form_for(@subscription) do |subscription_form| %>
<% if @subscription.errors.any? %>
<!-- Error stuff -->
<% end %>
<div class="field">
<%= subscription_form.label :start_date %><br />
<%= subscription_form.text_field :start_date %>
</div>
...
<h2>Customer Details</h2>
<%= subscription_form.fields_for :customer do |customer_fields| %>
<%= customer_fields.label :first_name %><br />
<%= customer_fields.text_field :first_name %>
...
<% end %>
<h2>Address</h2>
<%= subscription_form.fields_for :address do |address_fields| %>
<%= address_fields.label :address_1 %><br />
<%= address_fields.text_field :address_1 %>
...
<% end %>
<div class="actions">
<%= subscription_form.submit %>
</div>
<% end %>
Я знаю, что мой код контроллер работает, а когда я пытаюсь его непосредственно в консоли, Я получаю пустой адресный объект, но это не отображается в форме, что заставляет меня полагать, что мой код модели по-прежнему неверен.
только переменной из контроллера, который будет принят через ваше представление будет переменная @subscription. Вам также нужно сделать другие переменные экземпляра. – JosephL
Если я перехожу к переменным экземпляра в контроллере и в полях_for в представлении, я получаю сообщение об ошибке при отправке 'Can not mass-assign protected protected: customer, address' – purpletonic