Groovy / Grails, не могу удалить с карты - PullRequest
1 голос
/ 08 ноября 2011

Можете ли вы помочь мне определить, что не так в простом удалении с карты ниже (уведомление выводится прямо под ним)?

  public class Issue {
  ...

  def allButThis() {
    println "allButThis ..."
    def all = Issue.list()
    println "all is ${all}"
    all.remove(this.id)
    println "all with ${this.id} removed: ${all}"
    return all
  }

   String toString() {return "${id}: ${title}"}

Когда я запускаю это, я получаю следующие результаты, т.е.не удаляется, как ожидалось

  allButThis ...
  all is [1: Issue-1, 2: Issue-2, 3: Issue-3]
  all with 2 removed: [1: Issue-1, 2: Issue-2, 3: Issue-3]

Насколько я могу судить, это удаление должно работать, например, http://groovy.codehaus.org/JN1035-Maps,, где "удаление" описывается на одну треть вниз по странице.

Я использую Grails 1.3.7.

Спасибо

PS Я добавил свой метод toString () (см. Выше), возможно, я себя одурачил.----------- update ----------

Я удалил свой метод toString () и следовал решению Роба, а именно:

  all.remove(this)
  println "all with ${this} removed: ${all}"

, который производит:

 all is [momentum.Issue : 1, momentum.Issue : 2, momentum.Issue : 3]
 all with momentum.Issue : 2 removed: [momentum.Issue : 1, momentum.Issue : 3]

Ответы [ 2 ]

6 голосов
/ 09 ноября 2011
def all = Issue.list()

Это список, а не карта.

Итак, чтобы удалить из этого списка:

all.remove(this)

вместо.

1 голос
/ 09 ноября 2011

this.id имеет тип Long, и поэтому, если вы хотите удалить n-й элемент, вам нужно преобразовать его в целое число. однако это очень опасно, поскольку запись id не всегда является n-й записью. удалите этот пункт, используя .findAll({it.id != this.id}) будет больше сохранить.

В этом случае я бы порекомендовал вам сделать это так:

def allExceptThis = Issue.withCriteria {
   ne("id", this.id)
}.list();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...