3

我正在尝试在下拉列表中显示每方的活动项目。active_projects 是 Party 模型中的一个方法。然而,下面的 grouped_collection_select 代码有效,当我尝试将我的表单转换为 simple_form 时,我的 active_projects 方法不再被识别。

下面是我的两个代码摘录。第一个正常工作,而另一个导致错误。

# rails default
<%= f.grouped_collection_select(:project_id, 
                                 Party.all, 
                                 :"active_projects(#{date.strftime("%Y%m%d")})", 
                                 :party_name, 
                                 :id, :project_name) %>
# simple form
<%= f.input :project_id, 
            collection: Party.all, as: :grouped_select,
            group_method: :"active_projects(#{date})" %>
4

1 回答 1

0

我知道这个有点旧,但我有一个使用 simple_form 解决这个问题的方法。我不确定这是否是最好的解决方案,但它确实有效。

基本上,问题归结为将值传递给 group_method。就我而言,我有一门课程需要获取他/她所属的 current_users 公司。我的模型/数据库结构是这样的:

类型 -> 类别

就我而言,类型记录是全球性的,不属于特定公司。但是,类别模型记录确实属于特定公司。目标是显示具有全局类型的分组选择,然后显示它们下方的公司特定类别。这是我所做的:

class Type < ActiveRecord::Base

  has_many :categories
  attr_accessor :company_id

  # Basically returns all the 'type' records but before doing so sets the
  # company_id attribute based on the value passed. This is possible because
  # simple_form uses the same instance of the parent class to call the            
  # group_by method on.

  def self.all_with_company(company_id)
    Type.all.each do |item|
      item.company_id = company_id
    end
  end

  # Then for my group_by method I added a where clause that reuses the
  # attribute set when I originally grabbed the records from the model.

  def categories_for_company
    self.categories.where(:company_id => self.company_id)
  end


end

所以上面是类型类的定义。供参考的是我对类别类的定义。

class Category < ActiveRecord::Base

  belongs_to :company
  belongs_to :type

end

然后在我的 simple_form 控件上,我这样做了:

<%= f.association :category, :label => 'Category', :as => :grouped_select, :collection => Type.all_with_company(company_id), :group_method => :categories_for_company, :label_method => :name %>

基本上,我们不是在 :group_method 属性中传递我们想要过滤的值,而是在 :collection 属性中传递它。即使它不会用于获取父集合,它也只是被存储以供以后在类实例中使用。这样,当我们在该类上调用另一个方法时,它具有我们需要对子类进行过滤的值。

于 2015-10-31T02:03:27.753 回答