Итак, одна вещь, которую вы упускаете, это основная идея REST.Чтобы получить четкое объяснение того, как Rails обрабатывает поток управления, попробуйте этот ответ .
Но, в принципе, когда вы устанавливаете resources :home
в своих маршрутах, он определяет семь маршрутов для ваших семи стандартных действий контроллера (SHOW, INDEX, NEW / CREATE, EDIT / UPDATE, DESTROY).
Когда вы пытаетесь загрузить страницу в браузере, вы отправляете запрос GET.Действие NEW принимает запросы GET.Действие CREATE принимает только запросы POST (например, отправка формы).Итак, после того, как вы отправили свою форму в действие CREATE, вам нужно перенаправить на страницу, которая принимает запросы GET, если вы хотите что-то показать посетителю.
В качестве альтернативы может оказаться возможным переопределить Rails по умолчанию, чтобы разрешить CREATEпринимать запросы GET, но я бы посчитал это плохой идеей.
Вероятно, самое простое, что вам нужно сделать, это убедиться, что ваше действие CREATE в вашем контроллере выглядит следующим образом:
def create
(... do whatever processing of the params you want to do here ...)
redirect_to home_path # OR whatever other path you want.
end
В конце действия контроллера вы можете выполнить рендеринг (по умолчанию) или перенаправление.Redirect просто переходит к другому действию контроллера и выполняет все, что находится в этом действии.Рендеринг обычно отображает представление с тем же именем, что и действие контроллера, но рендер имеет множество опций, см. Здесь .
Для доступа к параметрам в представлении лучше всего назначитьих в переменную экземпляра.IE:
def ... # any action that accepts GET requests
@value = params[:value]
end
Однако параметры не будут сохраняться после перенаправления.Поэтому, если вы выполняете POST для одного действия и перенаправляете в другое (обычное соглашение), вам нужно либо сохранить параметры в БД, либо сохранить их в сеанс .
В вашемна тот случай, если вам кажется, что вы должны хранить их в сеансе, поскольку они, кажется, не привязаны к модели.
Затем в следующем действии контроллера вы проверите, есть ли определенные переменные в сеансе, и поместите их в экземпляр.переменные для использования в вашем представлении.
IE:
@value = session[:value] if session[:value]
Я знаю, что это много для усвоения, но я надеюсь, что это поможет вам сосредоточиться на том, что происходит.Последнее предложение, купите и прочитайте Beginning Rails 3 .Это коротко, мило, суть в том, что на прохождение уходит всего выходные, и к концу вы действительно поймете общую картину того, как работают рельсы, и ваша производительность и будущее обучение будут увеличены в четыре раза.
Хорошоудачи!