2

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

更新2

我将“事件”表单中的选择更改为:

<%= 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
4

2 回答 2

6

因此,在之前的评论和回答之后,我不确定您在这方面的位置,但假设您在上面的帖子仍然存在,看起来您在做 grouped_collection_select 错误。根据文档,它应该更像

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 。

于 2013-11-21T04:32:50.090 回答
0
  1. 尝试通过您自己需要的带有选项的数组生成,它必须看起来像 -

    ['North America', [['United States','US'],'Canada']], ['Europe', ['Denmark','Germany','France']]

然后使用 grouped_options_for_select

  1. 也许您可以尝试使用 simple_form gem。

  2. 代码scope :tasknotclosed, where("taskstatus_id != (?)", 3)- 尝试将其实现为 Workorder 类的实例方法,例如def tasknotclosed

于 2013-11-07T21:25:19.953 回答