0

在我的 Rails 项目中,我使用 Formtastic 来管理我的表单。我有一个模型,标签,有一个列,“组”。组列只是一种简单的硬编码方式来组织我的标签。我将发布我的 Tag 模型类,以便您了解它的组织方式

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

但我收到以下错误:

(nil:NilClass 的未定义方法 `klass')

有什么想法我哪里出错了吗?

感谢您的关注:]

4

2 回答 2

0

我首先将你的Group类移出这个文件,然后从你想要的地方继承,或者在这个类中使用一个模块。这是将方法和常量放入类并保持井井有条的首选方式。

于 2010-04-06T22:41:44.007 回答
0

我不确定我们是否支持 :group_by 和自定义 :collection。事实上,那部分代码是一个乱七八糟的贡献。因此,请尝试省略 :collection 对于初学者,然后看看你最终会在哪里。如果 Formtastic 有错误,请在 Github 上添加问题。

于 2010-04-07T04:03:14.190 回答