2013-11-30 2 views
0

У меня есть 2 модели собаки и litter_field:Nested_form has_one ассоциация

class Dog < ActiveRecord::Base 

belongs_to :user 
has_one :litter_field 
accepts_nested_attributes_for :litter_field 

attr_accessible :litter_field_attributes 

end 

class LitterField < ActiveRecord::Base 
belongs_to :dog 

attr_accessible :breed_type 

end 

В мой контроллер у меня есть:

class DogsController < ApplicationController 

def edit 
@dog = Dog.find(params[:id]) 
@dog.build_litter_field 
end 

И на мой взгляд, у меня есть:

<%= simple_form_for @dog do |f| %> 
<%= f.fields_for :litter_field do |l| %>  
    <div> 
     <%= l.label :breed_type %> 
     <%= l.input_field :breed_type %> 
    </div> 
    <%= f.button :submit, "Save" %> 
    <% end %> 

Я просмотрел документацию, и я могу сказать, что это должно работать, однако его страница не находится на главной странице редактирования, которую я предполагаю, где проблема. Должен ли я добавлять то, что находится в действии редактирования, к новому действию, которое отображает форму редактирования litter_field?

EDIT:

То, что я пытаюсь сделать, это разделить форму редактирования на отдельные страницы, я сделал это, добавляя дополнительные действия, которые делают дополнительные страницы, так что пользователь будет идти на собак/настройки/подстилки для пример, чтобы увидеть вложенную форму litter_field. Я попытался добавить @ dog.build_litter_field к действию помета, который отображает поля, но когда я пытаюсь и сохранить форму я получаю сообщение об ошибке:

Failed to remove the existing associated litter_field. The record failed to save when after its foreign key was set to nil. 

EDIT 2:

Установленный выше с добавлением :

has_one :litter_field, :dependent => :destroy 
accepts_nested_attributes_for :litter_field, update_only: true 

Для dog.rb единственная проблема, с которой я столкнулся сейчас, это не отображать сохраненное значение при редактировании.

ответ

0

Если вы назовете @dog.build_litter_field в действии edit, он построит новый планшет LitterField из того, что было ранее сохранено. Я хотел бы предложить попробовать что-то вроде этого, чтобы увидеть, если он решает проблему, которую вы сейчас наблюдаем:

def edit 
    @dog = Dog.find(params[:id]) 
    @dog.build_litter_field if @dog.litter_field.nil? 
end 

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

+0

К сожалению, ваше решение не сработало, я думаю, что сейчас я просто поставлю все в одной таблице, пока не узнаю больше, чтобы решить эту проблему. Спасибо за вашу помощь. – andybritton

+0

Когда вы говорите, что это не сработало, что вы видели? После того как вы сохранили данные в своем вложенном состоянии, вы можете увидеть информацию о собаке и litter_field в своей базе данных? Когда вы вернетесь в форму редактирования, вы увидите данные о собаке или litter_field? – cschroed

Смежные вопросы