2015-11-12 2 views
1

Я использую simple_form, известный камень Rails, который делает формы немного проще. У меня возникли проблемы с редактированием форм. Я могу сохранить записи отлично, но когда я перехожу к действию edit, я не вижу записи вложенного объекта из базы данных.Проблемы с редактированием вложенных форм

Модели

# app/models/user.rb 
has_one :member 
has_one :academic, through: :member 

accepts_nested_attributes_for :member, reject_if: :all_blank 

# app/models/member.rb 
belongs_to :user 

has_one academic, dependent: :delete 
accepts_nested_attributes_for academic, allow_destroy: true, reject_if: :all_blank 

# app/models/academic.rb 
belongs_to :member 

Контроллер

# app/controllers/member_controller.rb 

def edit 
@member = Member.find(params[:id]) 
@academic = Academic.find_by_member_id(params[:id]) 

@member.build_academic 
@member.academic.build_exchange_student # ExchangeStudent belongs_to :academic also 
end 

Посмотреть

# app/views/_form.html.erb partial on app/views/edit.html.erb 
<%= simple_form_for @member, url: database_members_path do |f| %> 

<%= f.fields_for :academic do |academic_exchange_student| %> 
    <%= academic_exchange_student.fields_for :exchange_student do |exchange| %> 

<!-- ##### Exchange student --> 
    <div class="row"> 
     <%= academic_exchange_student.text_field :major%> 
    </div> 

<% end %> 
<% end %> 

Да, я разрешая ids в params.require(...). Запись сохранена отлично, я вижу ее в rails console.

Когда я перехожу на эту страницу edit, я могу видеть информацию о члене уже в text_field, но я не вижу информацию о @member.academic.major.

Кроме того, если я перейду на страницу редактирования и вернусь в браузере, запись academic будет удалена загадочно.

Любая помощь будет оценена. Спасибо.

ответ

1

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

Я хотел бы предложить вам построить новый учебный, только если он уже не существует:

def edit 
    @member = Member.find(params[:id]) 

    @member.build_academic unless @member.academic 
    @member.academic.build_exchange_student unless @member.academic.exchange_student 
end 

PS: вы также не нуждаются в переменной @academic, если это не не используется где-то в окне редактирования ,

+1

большое спасибо, сработал отлично! Я думал, что с помощью '@ academy 'форма каким-то образом получит данные объекта, как это происходит с' @member = Member.find (id) '. Еще раз спасибо! –

+0

Добро пожаловать! –

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