我有grouped_collection_select
我希望将显示的记录限制为未关闭的任务。我可以轻松过滤收集列表的opt组中显示的记录。但是,我无法过滤选项级别记录(group_method)。
这是我的任务模型:
scope :tasknotclosed, where("taskstatus_id != (?)", 3)
这是当前的选择:
<%= f.grouped_collection_select :task_id, Workorder.wonotclosed.order(:description), :tasks, :description, :id, :taskname, :include_blank => 'Select:' %>
而不是:tasks
,我想使用类似Task.tasknotclosed.all
但是,这给了我:
syntax error, unexpected '['
感谢您的帮助!
更新1
我尝试将其添加到任务模型中:
def tasknotclosed?
self.taskstatus_id != 3
end
并将选择更改为:
<%= grouped_collection_select(:tasks, :task_id, Workorder.wonotclosed.order(:id), :task.tasknotclosed?, :description, :id, :taskname, :include_blank => true) %>
但我明白了:
undefined method `tasknotclosed?' for :task:Symbol
UPDATE2
我将事件表单中的选择更改为:
<%= f.grouped_collection_select :task_id, @workorderlist, @tasklist, :description, :id, :taskname, :include_blank => 'Select:' %>
事件控制器:
def new
@event = Event.new
@tasklist = Task.where("showtimer == (?)", true).order(:taskname)
@workorderlist = Workorder.where("wostatus_id != (?)", 15).order(:description)
@workorderlist
按我预期的方式工作。
但是,@ tasklist给了我
syntax error, unexpected $end
答案 0 :(得分:6)
所以我在之前的评论和回答之后不确定你的位置,但假设你上面的帖子仍然有效,那看起来你正在做的groups_collection_select错误。根据{{3}},它应该更像是
grouped_collection_select :event, :task_id, @workorderlist, @tasklist, :description, :id, :taskname
但问题的一部分可能是在应该有一个方法时使用实例变量(@tasklist)。第四个元素需要是group_method(=“方法的名称,当在集合成员上调用时,返回表示标记的子对象数组。”)你不能在你的成员上调用@tasklist采集。所以我建议你在work_order模型中使用这个对象方法(假设work_order has_many:tasks),如下所示:
class WorkOrder
def tasklist
tasks.where(<conditions>)
end
end
这样你就可以实际调用方法:tasklist在那里的第四个位置。
答案 1 :(得分:0)
尝试使用您自己所需的数组生成选项,它必须看起来像 -
['North America',
[['United States','US'],'Canada']],
['Europe',
['Denmark','Germany','France']]
然后使用grouped_options_for_select
也许您可以尝试使用simple_form gem。
代码scope :tasknotclosed, where("taskstatus_id != (?)", 3)
- 尝试将其实现为类Workorder的实例方法,例如def tasknotclosed