Ruby on rails Rails嵌套的用户配置文件字段,其中designe不保留输入
我正在尝试将表单字段添加到我的“设计用户注册”视图中。这已经实现,并且在我提交表单时将运行验证。但是,如果我得到任何表单错误,输入数据不会按照原始表单重新填充表单字段,尽管我可以在添加到开发视图的小调试器中看到正确的值 以下是我的看法:Ruby on rails Rails嵌套的用户配置文件字段,其中designe不保留输入,ruby-on-rails,devise,nested-attributes,Ruby On Rails,Devise,Nested Attributes,我正在尝试将表单字段添加到我的“设计用户注册”视图中。这已经实现,并且在我提交表单时将运行验证。但是,如果我得到任何表单错误,输入数据不会按照原始表单重新填充表单字段,尽管我可以在添加到开发视图的小调试器中看到正确的值 以下是我的看法: <h2>Sign up</h2> <% resource.build_profile %> <%= form_for(resource, :as => resource_name, :url => regi
<h2>Sign up</h2>
<% resource.build_profile %>
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div><%= f.label :email %><br />
<%= f.email_field :email %></div>
<div><%= f.label :username %> <i>(this cannot be changed so choose wisely)</i><br />
<%= f.text_field :username %></div>
<div><%= f.label :password %><br />
<%= f.password_field :password %></div>
<div><%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation %></div>
<%= f.fields_for :profile do |profile_form| %>
<div><%= profile_form.label :full_name %><br />
<%= profile_form.text_field :full_name %></div>
<div><%= profile_form.label :birth_date %><br />
<%= profile_form.date_select :birth_date, start_year: Time.now.year, end_year: Time.now.year - 80, order: [:day, :month, :year], prompt: { day: 'Choose day', month: 'Choose month', year: 'Choose year' } %></div>
<div><%= profile_form.label :gender %><br />
<%= profile_form.select :gender, { "Male" => '0', "Female" => '1' } %></div>
<div><%= profile_form.label :postcode %><br />
<%= profile_form.text_field :postcode %></div>
<div><%= profile_form.label :description, "About you" %><br />
<%= profile_form.text_area :description %></div>
<% end %>
<div><%= f.submit "Sign up" %></div>
<% end %>
<%= render :partial => "devise/shared/links" %>
注册
资源名称:url=>注册路径(资源名称))do | f |%>
(这无法更改,因此请明智地选择)
“0”,“女性”=>1'}%>
“设计/共享/链接”%>
我没有显示控制器代码,因为它使用Gem中的designe代码。我做错了什么/没有做什么?如果您的用户模型引用了配置文件模型,请尝试传递
<%= f.fields_for resource.profile do |profile_form| %>
现在,您正在传递对模型的引用,但表单需要一个实例。您每次都使用
build\u profile
重建配置文件,这意味着在重新显示表单时,它使用的是新的配置文件实例,而不是有错误的实例。只需更改该代码,使其仅在不存在概要文件时构建概要文件:
resource.build_profile unless resource.profile
类似的方法应该行得通。卡洛斯的回答帮助我解决了这个问题
resource.build_profile unless resource.profile
我已经试过了,我收到一条消息,告诉我它不能聚合asign:profile。如果我将其添加到attr_可访问列表中,我会得到一个
ActiveRecord::RegistrationController中的AssociationTypeMismatch#create Profile(#70114845017280)预期的,get-ActiveSupport::HashWithInferenceAccess(#70114830339360)
在遇到一些问题后发现了这个建议,基于一些答案thx分享这个建议帮助很大!