我有一个简单的模型,User
,通过Rails(version 4.0.2)的Devise(version 3.0.4)gem生成。我还制作了一个名为Profile
的非设计模型。配置文件有两个字符串属性,name
和bio
。每个用户has_one
配置文件,以及每个用户配置文件belongs_to
。我试图让用户注册表单包含配置文件属性,因此新用户表单中嵌套的配置文件表单。我的表单设置正确,并且所有用户和配置文件属性都已正确传递到:params
。 似乎一切正常,除了配置文件,它的属性不保存到数据库。日志显示:profile
对用户为零。 我做了很多研究,我觉得我已经尝试了一切,所以我希望有人能够解决这个问题。下面的代码:Rails设计模型不是以嵌套形式保存模型?
用户模式:
class User < ActiveRecord::Base
has_one :profile, dependent: :destroy, :autosave => true
accepts_nested_attributes_for :profile
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
end
剖面模型:
class Profile < ActiveRecord::Base
belongs_to :user, :autosave => true
validates :user_id, presence:true
end
注册记忆控制器:
class RegistrationsController < Devise::RegistrationsController
def new
resource = build_resource({})
resource.build_profile
respond_with resource
end
end
新用户的形式,views/devise/registrations/new.html.erb
:
<h2>Sign up</h2>
<%= 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, :autofocus => true %></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 |builder| %>
<h2><%= builder.label :bio%></h2>
<p><%= builder.text_field :bio %></p>
<h2><%= builder.label :name %></h2>
<p><%= builder.text_field :name %></p>
<% end %>
<div><%= f.submit "Sign up" %></div>
<% end %>
我没有在配置控制器东西,除了像“新”空现有的方法。
你没有你强的参数在应用程序控制器设置, 你做? – JustBasti