Как я могу передать объекты от одного контроллера до другого в направляющих?

Этот поток точки к некоторому коду для выхода из URL в php. Существует escape() и unescape(), который сделает большую часть работы, но Вы должны добавить пару дополнительных вещей.

function urlencode(str) {
str = escape(str);
str = str.replace('+', '%2B');
str = str.replace('%20', '+');
str = str.replace('*', '%2A');
str = str.replace('/', '%2F');
str = str.replace('@', '%40');
return str;
}

function urldecode(str) {
str = str.replace('+', ' ');
str = unescape(str);
return str;
}

8
задан John Baker 17 August 2009 в 22:19
поделиться

3 ответа

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

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

<%= f.hidden_field :name %>

Если полей много, это может быть утомительно, поэтому вы можете захотеть перебрать хэш params [...] или column_names , чтобы определить, какие атрибуты передать.

В качестве альтернативы вы можете сохранить атрибуты в сеансе .

def first
  @item = Item.new(params[:item])
  session[:item_attributes] = @item.attributes
end

def second
  @item = Item.new(session[:item_attributes])
  @item.attributes = params[:item]
end

В-третьих, как Пол Кибл упомянул, что вы можете сохранить модель в базу данных, но пометить ее как неполную. Вы можете использовать для этого конечный автомат .

Наконец,

23
ответ дан 5 December 2019 в 05:45
поделиться

Обычно мои контроллеры не вызывают действия друг друга. Если у вас есть идентификатор, который начинается с заглавной буквы, в Ruby это константа. Если вам нужна переменная уровня экземпляра, пусть она начинается с @.

@var1 = ["Hello", "Goodbye"]

Можете ли вы объяснить, какова ваша цель?

2
ответ дан 5 December 2019 в 05:45
поделиться

Рассматривали ли вы использование хэша флеш-памяти? Многие люди используют его исключительно для сообщений об ошибках и тому подобного, он явно для передачи переходных данных, которые могут вас заинтересовать.

По сути, метод flash возвращает хеш. Любое значение, которое вы присвоите ключу в хэше, будет доступно для следующего действия, но затем оно исчезнет. Итак:

def first
  flash[:var] = ["hello", "goodbye"]
  redirect_to :action => :second
end

def second
  @hello = flash[:var].first
end
2
ответ дан 5 December 2019 в 05:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: