Rails新手,嵌套的fields_for在没有现有记录时不显示编辑

时间:2014-06-23 17:51:30

标签: ruby-on-rails ruby-on-rails-3

我希望现有用户能够为自己创建一个“常量”记录,以便稍后用于执行计算。我正在使用devize。

当我“编辑个人资料”时,如果数据库中不存在,则没有为dealer_constant显示的字段。

应用程序/模型/ 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

应用程序/视图/用户/ 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 %>

应用程序/视图/用户/ _dealer_constant_fields.html.erb

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

非常感谢任何协助。

1 个答案:

答案 0 :(得分:0)

由于用户在编辑时没有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 %>