0

Я действительно пытаюсь понять, как создать вложенную форму с моделью, соединенной второй моделью. Я искал 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 %> 

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

+0

только переменной из контроллера, который будет принят через ваше представление будет переменная @subscription. Вам также нужно сделать другие переменные экземпляра. – JosephL

+0

Если я перехожу к переменным экземпляра в контроллере и в полях_for в представлении, я получаю сообщение об ошибке при отправке 'Can not mass-assign protected protected: customer, address' – purpletonic

ответ

1

Purpletonic, глядя вашу последнюю проблему о:

Can't mass-assign protected attributes: customer, address 

вам нужно добавить эти атрибуты в вашей модели, как:

attr_accessible :customer, :address 
Смежные вопросы