2013-12-21 6 views
1

아주 적은 비율의 개체가 다소 큰 설명 텍스트를 갖는 모델이 있습니다. 데이터베이스를 어느 정도 정규화 된 상태로 유지하려고 시도하면서이 설명 텍스트를 별도의 모델로 추출하려고했지만 ActiveAdmin에서 현명한 워크 플로우를 만드는 데 어려움을 겪고 있습니다.ActiveAdmin에서 has_one 연관 수정 - 아무 것도 입력하지 않으면 저장하지 마십시오

내 모델은 다음과 같이 :

이 추가 작동
form do |f| 
    ... 
    f.inputs :for => [ 
         :long_description, 
         f.object.long_description || LongDescription.new 
        ] do |ld_f| 
     ld_f.input :text 
    end 

    f.actions 
    end 

/를 LongDescription 편집 :

class Person < ActiveRecord::Base 
    has_one :long_description 
end 

class LongDescription < ActiveRecord::Base 
    attr_accessible :text, :person_id 
    belongs_to :person 

    validates :text, presence: true 
end 

현재 나는 사람 모델을 편집과 같이 다소보고에 대한 양식을 만든 개체,하지만 여전히 문제가 : 텍스트를 입력하지 않으면 LongDescription 개체의 유효성 검사/만들기를 피하고 싶습니다.

나보다 더 나은 ActiveAdmin 스킬을 가진 사람이라면 어떻게해야할까요?

답변

2

accepts_nested_attributes_for :long_description을 사용하고 있습니까? 그 속성이없는 경우 중첩 된 객체의 생성 /이 레일 건 아닌 ActiveAdmin을 것입니다

class Person < ActiveRecord::Base 
    has_one :long_description 
    accepts_nested_attributes_for :long_description, reject_if: proc { |attrs| attrs['text'].blank? } 
end 

주, 그래서 그것은 단순히 할당 및 업데이트를 건너 뜁니다 : 그렇다면, 당신은 :reject_if 옵션을 추가 할 수 있습니다 .

여기에 더 많은 것 : http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

+0

멋진, 그 트릭을! 나는 실제로 accepts_nested_attributes_for를 사용하고 있었지만, reject_if와 같은 옵션이 있다고 생각조차하지 않았습니다. 감사! – rogerkk

+0

피칭과 같은 느낌이들 경우를 대비해 관련 객체를 다시 자동 삭제하는 것과 관련된 질문을 추가했습니다. http://stackoverflow.com/questions/20742041/editing-a-has-one-association-in-activeadmin-destroying -when-attribute-is-blank – rogerkk

관련 문제