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

働いた!defwith_companyを変更します

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

問題は、with_companyメソッドbuildが新しいCompanyオブジェクトを作成するために使用することです。build新しいオブジェクトが自動的に作成され、データベースに保存されます。したがって、そのフォームがレンダリングされるたびに、それに別のフォームを追加CompanyしますUser。ページのリロードを数回押すだけで、私の言いたいことがわかるはずです。

修正は、そのメソッドcreateの代わりに使用することになると思います。buildこれにより、新しいオブジェクトが作成されますが、データベースには保存されません。

ただし、ビュー自体ではなく、ビューをレンダリングするコントローラーでこれを行う必要があります。Devise は常にこれを簡単にするわけではありませんが、Devise コントローラーから継承して必要なものを追加する新しいコントローラーを作成できるはずです。現在のプロジェクトhereで同様のことを行います。

于 2012-11-06T06:32:24.090 に答える