Этот поток точки к некоторому коду для выхода из 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;
}
Назначать объект константе - не лучшая идея. Верно, что это глобальное пространство, но оно глобально для всех, поэтому любой другой пользователь, перешедший к этому запросу, получит этот объект. Есть несколько решений этой проблемы.
Я предполагаю, что у вас есть многоступенчатая форма, которую вы проходите. В этом случае вы можете передать установленные атрибуты как скрытые поля.
<%= 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
В-третьих, как Пол Кибл упомянул, что вы можете сохранить модель в базу данных, но пометить ее как неполную. Вы можете использовать для этого конечный автомат .
Наконец,
Обычно мои контроллеры не вызывают действия друг друга. Если у вас есть идентификатор, который начинается с заглавной буквы, в Ruby это константа. Если вам нужна переменная уровня экземпляра, пусть она начинается с @.
@var1 = ["Hello", "Goodbye"]
Можете ли вы объяснить, какова ваша цель?
Рассматривали ли вы использование хэша флеш-памяти? Многие люди используют его исключительно для сообщений об ошибках и тому подобного, он явно для передачи переходных данных, которые могут вас заинтересовать.
По сути, метод flash возвращает хеш. Любое значение, которое вы присвоите ключу в хэше, будет доступно для следующего действия, но затем оно исчезнет. Итак:
def first
flash[:var] = ["hello", "goodbye"]
redirect_to :action => :second
end
def second
@hello = flash[:var].first
end