0

当必填字段不正确时,页面会重新加载,您会收到不正确的输入字段,并且表单 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|
  ...
...
4

2 回答 2

0

问题是您的with_company方法用于build创建新Company对象。build将自动创建新对象并将其保存到数据库中。因此,每次呈现该表单时,您都会向该表单添加Company另一个User. 只需点击页面上的重新加载几次,您就会明白我的意思。

我认为解决方法是使用create而不是build那种方法;这会创建一个新对象,但不会将其保存到数据库中。

不过,更有可能的是,您应该在呈现视图的控制器中执行此操作,而不是在视图本身中。Devise 并不总是让这件事变得简单,但您应该能够创建一个新的控制器,该控制器继承自 Devise 控制器并添加您需要的内容。我在这里的当前项目中做了类似的事情。

于 2012-11-06T06:32:24.090 回答
0

工作!更改 def with_company on

  def with_company
    if self.companies.empty?
      self.companies.build
    end
    self
  end
于 2012-11-06T07:28:56.813 回答