RoR重复字段

时间:2012-11-06 06:04:39

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

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

2 个答案:

答案 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