当不正确的必填字段时,页面会重新加载并且您收到错误的输入字段,并且表单company_form中的所有字段都会重复。
用户模型(user.rb):
class User < ActiveRecord::Base
....
has_many :companies, :autosave => true
accepts_nested_attributes_for :companies
has_and_belongs_to_many :roles
def role?(role_name)
return !!self.roles.find_by_name(role_name)
end
def with_company
self.companies.build
self
end
end
公司型号:
class Company < ActiveRecord::Base
...
belongs_to :user
...
end
视图/设计/注册/ new.html.haml:
= form_for(resource.with_company, :as => resource_name, :url => registration_path(resource_name), :html => { :class => 'form-horizontal'}) do |f|
...
= f.fields_for :companies do |company_form|
...
...
答案 0 :(得分:0)
问题是您的with_company
方法使用build
来创建新的Company
对象。 build
将自动创建新对象并将其保存到数据库中。因此,每次呈现该表单时,您都会向该Company
添加另一个User
。只需在页面上重新加载几次就可以了解我的意思。
我认为修复方法是在该方法中使用create
而不是build
;这会创建一个新对象,但不会将其保存到数据库中。
但更有可能的是,您应该在呈现视图的控制器中执行此操作,而不是在视图本身中执行此操作。 Devise并不总是这么简单,但你应该能够创建一个新的控制器,它继承自Devise控制器并添加你需要的东西。我在当前的项目here中做了类似的事情。
答案 1 :(得分:0)
工作!
更改def with_company def with_company
if self.companies.empty?
self.companies.build
end
self
end