Конвертировать вспышки в массив как стандарт - PullRequest
2 голосов
/ 31 января 2012

Я начинаю изучать рубин на рельсах, как это до сих пор.Но мне тяжело оборачиваться вокруг этих флеш-сессий.

Я бы предпочел, чтобы это работало примерно так:

flash[:alert] << "first alert message" 
flash[:alert] << "second alert message"

Но это не работает (правка: поскольку flash [: alert] не является массивом).Решением было бы инициировать flash [: alert] в виде пустого массива в какой-либо конструкции, я попробовал это в before_filter, но так и не заработал.

Есть идеи?

Редактировать: Как я уже писал в некоторых комментариях.То, что я пытаюсь сделать, это найти место для преобразования flash [: alert] в массив.В какой-то конструкции.Если я сделаю это до того, как вызову flash [: alert], я должен знать, когда я сделаю это в первый раз, чтобы не перезаписывать все, что у меня уже есть.

Ответы [ 2 ]

2 голосов
/ 31 января 2012

Как спросил @lucapette, что вы пытаетесь сделать?Если вам нужно несколько сообщений в несколько строк, вы можете явно добавить новые строки:

flash[:alert] += "\nSecond message."

Или вы сможете сделать что-то вроде этого:

flash[:alert] = []
flash[:alert] << "Message 1"

И тогда, когда вы сможетеизмените макет приложения, чтобы проходить через вспышки, предполагая, что они будут всегда массивами.Если они только иногда будут массивом, вы можете проверить это сначала с помощью чего-то вроде:

flash[:alert].class == Array

или

flash[:alert].is_a? Array

или в любом случае автоматически сделать его массивом:

Array(flash[:error])

Тогда вы можете зацикливаться вокруг него так, как хотите.

1 голос
/ 01 февраля 2012

Вы можете написать вспомогательный метод в вашем контроллере приложения. Например, вот так:

class ApplicationController

  def add_to_flash_array key, value
    # set empty array as default value
    flash[key] ||= [] 

    if flash[key].is_a? Array
      flash[key] << value
    else # somebody set a value from underneath this method, enter panic mode
      raise "flash['#{key}'] is not an array!"
    end
  end
end

# usage

add_to_flash_array :alert, 'Message 1'
add_to_flash_array :alert, 'Message 2'

Затем перейдите в цикл просмотра flash[:alert] и создайте свою разметку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...