如何在 Formtastic for Rails 中为给定模型制作按列分组的分组选择框?

发布于 2024-08-28 02:03:56 字数 1757 浏览 7 评论 0原文

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

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

但我收到以下错误:

(未定义方法“klass” nil:NilClass)

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

感谢您的浏览:]

In my Rails project I'm using Formtastic to manage my forms. I have a model, Tags, with a column, "group". The group column is just a simple hardcoded way to organize my tags. I will post my Tag model class so you can see how it's organized

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

My goal is to use Formtastic to provide a grouped multiselect box, grouped by the column, "group" with the tags that are returned from the non_brands method. I have tried the following:

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

But I receive the following error:

(undefined method `klass' for
nil:NilClass)

Any ideas where I'm going wrong?

Thanks for looking :]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

挽手叙旧 2024-09-04 02:03:57

我不确定我们是否支持 :group_by 和自定义 :collection。事实上,这部分代码是一个混乱的贡献。因此,对于初学者来说,尝试省略 :collection,然后看看结果如何。如果 Formtastic 存在错误,请在 Github 上添加问题。

I'm not sure we support :group_by with a custom :collection. In fact, that who part of the code was a messy contribution. So, try omitting the :collection for starters, and see where you end up. If there's a bug with Formtastic, please add an issue on Github.

╄→承喏 2024-09-04 02:03:57

我首先将您的 Group 类移出此文件,然后从您想要的位置继承,或者在此类中使用模块。这是将方法和常量放入类并保持组织的首选方法。

I'd first move your Group class out of this file, and just inherit from where you want, or use a Module in this class. This is the preferred way of getting methods an constants into a class and staying organized.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文