Новичок в Rails, вложенные поля_для не отображения при редактировании, когда нет существующей записи

#ruby-on-rails #ruby-on-rails-3

#ruby-on-rails #ruby-on-rails-3

Вопрос:

Я бы хотел, чтобы существующий пользователь мог создать для себя «постоянную» запись, которая будет использоваться позже для выполнения вычислений. Я использую devize.

Когда я «редактирую профиль», для dealer_constant не отображаются поля, если их нет в БД.

app/models/user.rb

     class User < ActiveRecord::Base
    attr_accessible :email, :password, :password_confirmation, :first_name, :last_name,           :dealer_constant_attributes
    has_one :dealer_constant
    accepts_nested_attributes_for :dealer_constant
 

app/views/user/edit.html.erb

     <%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
    <%= f.fields_for :dealer_constant do |builder| %>
    <%= render "dealer_constant_fields", :f => builder %>
    <% end %>
 

app/views/user/_dealer_constant_fields.html.erb

     <%= f.label :crew_size %>
    <%= f.number_field :crew_size %>
    <%= f.label :hourly_rate %>
    <%= f.text_field :hourly_rate %>
 

Любая помощь была бы весьма признательна.

Ответ №1:

Поскольку у пользователя нет dealer_constant на момент редактирования, поля не отображаются. Что вам нужно, так это следующее:

В user.rb добавьте этот метод

 def with_dealer_constant
  self.biuld_dealer_constant if self.dealer_constant.nil?
  self
end
 

Затем в файле просмотра app/views/user/edit.html.erb сделайте это:

 <%= form_for([resource_name, resource.with_dealer_constant], url: registration_path(resource_name), html: { method: :put }) do |f| %>
  <%= f.fields_for :dealer_constant do |builder| %>
    <%= render "dealer_constant_fields", :f => builder %>
  <% end %>

  <!-- rest of the fields -->
<% end %>
 

Комментарии:

1. Большое спасибо, хлопаю себя по лбу. С благодарностью, решена очень досадная проблема.