2012-11-06 7 views
0

잘못된 필수 필드 인 경우 페이지가 다시로드되고 잘못된 입력 필드와 company_form 양식의 모든 필드가 중복됩니다.RoR 중복 필드

사용자 모델 (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

그리고 문제는 무엇입니까? 나머지 코드는 무엇입니까? – sevenseacat

+0

아마도 with_company에 문제가 있습니다. 페이지가 다시로드되어 다른 회사를 만들었을 때 하나의 회사 만 기록해야하는 경우 – Nar

답변

0

근무했습니다. with_company 변경하기

def with_company 
    if self.companies.empty? 
     self.companies.build 
    end 
    self 
    end 
0

문제 with_company 메서드가 build을 사용하여 새 Company 개체를 만드는 것입니다. build은 자동으로 새 개체를 만들어 데이터베이스에 저장합니다. 따라서 양식이 렌더링 될 때마다 해당 UserCompany을 추가하십시오. 페이지에서 몇 번 새로 고침을하면 의미를 알 수 있습니다.

난 그 방법으로 대신 create을 사용하는 것이 좋다고 생각합니다. 이렇게하면 새 개체가 만들어 지지만 데이터베이스에 저장되지는 ​​않습니다.

그러나보기 자체가 아닌보기를 렌더링하는 컨트롤러에서이 작업을 수행해야 할 가능성이 큽니다. Devise가 항상 쉽게 이해할 수있는 것은 아니지만 Devise 컨트롤러를 상속 받고 필요한 것을 추가하는 새로운 컨트롤러를 생성 할 수 있어야합니다. 나는 현재 프로젝트에서 비슷한 것을한다 here.

+0

만들기가 작동하지 않습니다. "부모가 저장되어 있지 않으면 create를 호출 할 수 없습니다"라는 오류가 발생합니다. – Nar

+0

오. 그럼 내가 잘못한거야. :) – dpassage

+0

끔찍하지, 내 문제에 대한 해결책을 찾았어요, 어쨌든 고마워. – Nar