#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. Большое спасибо, хлопаю себя по лбу. С благодарностью, решена очень досадная проблема.