我正在尝试在下拉列表中显示每方的活动项目。 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})" %>
答案 0 :(得分:0)
我知道这个有点旧,但我使用simple_form解决了这个问题。我不确定它是否是最佳解决方案,但确实有效。
基本上,问题归结为将值传递给group_method。在我的情况下,我有一个课程需要获得他/她所属的current_users公司。我的模型/数据库结构是这样的:
类型 - &gt;分类
在我的情况下,类型记录是全局的,不属于特定公司。但是,类别模型记录确实属于特定公司。目标是显示具有全局类型的分组选择,然后显示其下面的公司特定类别。这是我做的:
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属性。即使它不会用于获取父集合,它也只是存储在以后在类实例中使用。这样,当我们在该类上调用另一个方法时,它具有我们对子进行过滤所需的值。