2013-11-07 4 views
2

У меня есть grouped_collection_select, где я хотел бы ограничить записи отображаемыми задачами, которые не закрыты. Я могу легко фильтровать записи, отображаемые в группе opt списка коллекции. Но я не могу отфильтровать записи уровня уровня (group_method).Rails grouped collection select limit list

Это в моей целевой модели:

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 '[' 

Спасибо за помощь!

UPDATE 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

http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/grouped_collection_select есть некоторые довольно объяснительные примеры. – xlembouras

ответ

6

Так что я не знаю, где вы находитесь на этом после предыдущих комментариев и ответ, но предполагается, что ваш пост выше до сих пор стоит, это выглядит, как вы делаете grouped_collection_select неправильно.Согласно docs, оно должно быть больше, как

grouped_collection_select :event, :task_id, @workorderlist, @tasklist, :description, :id, :taskname 

Но часть проблемы может использовать переменную экземпляра (@tasklist), когда должен быть способ там. Четвертый элемент должен быть group_method (= «Имя метода, который при вызове члена коллекции возвращает массив дочерних объектов, представляющих теги».) Вы не можете вызывать @tasklist у члена вашей коллекция. Поэтому я бы предложил сделать этот метод объекта в модели work_order (при условии, work_order has_many: задачи), например так:

class WorkOrder 
    def tasklist 
    tasks.where(<conditions>) 
    end 
end 

так, что тогда вы можете вызвать метод: список задач в этой четвертой позиции там.

+0

Абсолютно верно о четвертом параметре. Что касается вопроса, я бы предположил, что метод «incomplete_task_list» будет иметь наибольший смысл. Вероятно, содержит что-то вроде tasks.where ('taskstatus_id! = 3'). Order (: taskname), учитывая предыдущее обсуждение. – AndyV

+0

Спасибо, я попробую и дам вам знать – Reddirt

+0

Это сработало! 'def incomplete_task_list tasks.where (" taskstatus_id! = (?) ", 3) .order (: taskname) end' – Reddirt

0
  1. Try для создания вашего собственного необходимого массива с опциями, он должен выглядеть примерно так -

    ['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

+0

pleas see my update – Reddirt

+0

Task.tasknotclosed.all должен быть вложенным массивом? –

Смежные вопросы