2010-04-06 4 views
0

레일스 프로젝트에서 Formtastic을 사용하여 양식을 관리하고 있습니다. 나는 모델, 태그, 컬럼, "그룹"을 가지고있다. 그룹 열은 내 태그를 구성하는 간단한 하드 코딩 된 방법 일뿐입니다. 당신이이 조직 어떻게 볼 수 있도록 내 태그 모델 클래스를 게시 할 예정입니다Formtastic for Rails에서 주어진 모델에 대한 열로 그룹화 된 선택 상자를 그룹화하려면 어떻게합니까?

class Tag < ActiveRecord::Base 
    class Group 
    BRAND  = 1 
    SEASON = 2 
    OCCASION = 3 
    CONDITION = 4 
    SUBCATEGORY = 5 
    end 

    has_many :taggings, :dependent => :destroy 
    has_many :plaggs, :through => :taggings 
    has_many :monitorings, :as => :monitorizable 

    validates_presence_of :name, :group 
    validates_uniqueness_of :name, :case_sensitive => false 

    def self.brands(options = {}) 
    self.all({ :conditions => { :group => Group::BRAND } }.merge(options)) 
    end 

    def self.seasons(options = {}) 
    self.all({ :conditions => { :group => Group::SEASON } }.merge(options)) 
    end 

    def self.occasions(options = {}) 
    self.all({ :conditions => { :group => Group::OCCASION } }.merge(options)) 
    end 

    def self.conditions(options = {}) 
    self.all({ :conditions => { :group => Group::CONDITION } }.merge(options)) 
    end 

    def self.subcategories(options = {}) 
    self.all({ :conditions => { :group => Group::SUBCATEGORY } }.merge(options)) 
    end 

    def self.non_brands(options = {}) 
    self.all({ :conditions => [ "`group` != ? AND `group` != ?", Tag::Group::SUBCATEGORY, Tag::Group::BRAND] }.merge(options)) 
    end 
end 

내 목표는에서 반환되는 태그 열, "그룹"별로 그룹화 그룹화 된 다중 선택 상자를 제공하기 위해 Formtastic을 사용하는 것입니다 non_brands 메소드. 나는 시도 다음

= f.input :tags, :required => false, :as => :select, :input_html => { :multiple => true }, :collection => tags, :selected => sel_tags, :group_by => :group, :prompt => false 

하지만 다음과 같은 오류가 나타납니다 내가 잘못거야

(undefined method `klass' for nil:NilClass)

어떤 아이디어? 보고에 대한

감사합니다 :]

답변

0

다음과 같이 지원되는지 잘 모르겠습니다. group_by with custom : collection. 사실, 코드의 일부는 지저분한 기여였습니다. 따라서, : for the starters를 생략하고 어디에서 끝나는 지 확인하십시오. Formtastic에 버그가있는 경우 Github에 문제를 추가하십시오.

0

내가 처음이 파일에서 당신의 Group 클래스를 이동하고 당신이 원하는 곳에서 상속, 또는이 클래스의 모듈을 사용하십시오. 이것은 메소드를 상수를 클래스로 가져오고 구성을 유지하는 기본 방법입니다.

관련 문제