Rails Wicked Gem - Понимание маршрутизации
Ладно, я не совсем понимаю вложенную маршрутизацию в злой жемчужине.
Пока у меня есть это. Я не уверен, что все в правильной папке или я делаю это правильно.
routes.rb
resources :events
resources :events do
resources :build, controller: 'events/build'
end
Контроллеры / events_controller.rb
def create
@event = Event.new(event_params)
if @event.save
flash[:success] = "Event Created!"
redirect_to event_build_path(event_id: "event", id: @event.id)
# previously had redirect_to event_build_path without parameters)
else
render 'new'
end
end
Контроллеры / События / build_controller.rb
class Events::BuildController < ApplicationController
include Wicked::Wizard
steps :details, :visibility
def show
@event = Event.find(params[:event_id])
render_wizard
end
end
просмотров / сборки / details.html.erb
<%= form_for @event do |f| %>
#blab blah
<% end %>
У меня был event_build_path
без параметров сначала и у меня была эта ошибкаNo route matches {:action=>"show", :controller=>"events/build"} missing required keys: [:event_id, :id]
Оказал влияние от этого перенаправленного драгоценного камня Rails с параметрами, но не полностью понимает маршрутизацию
У меня нет установленного event_id, и я не очень понимаю, как wicked отслеживает шаг с помощью идентификатора (или его event_id).
Поскольку мой объект (событие) еще не создан, что представляют собой "event_id" и идентификатор в конце?
1 ответ
Не совсем ответ, но некоторые уточнения. То, что вы пытаетесь сделать, довольно сложно, и требует кучу настроек под ваш собственный случай. Если вам не нравятся злые люди, или если этот урок почти непонятен, может быть, лучше пропустить пока что делать волшебника и вернуться и попробовать его снова через месяц или около того, как только у вас будет время помедитировать над ним.,
форма
Это твоя злая форма
<%= form_for @event do |f| %>
#blab blah
<% end %>
Злой работает, делая две вещи, сохраняя состояние в вашем URL domain.com/build_pah/<step>
и предоставляя вам вспомогательные методы, чтобы легко манипулировать текущим состоянием. После того, как вы отобразите форму, вы должны указать браузеру, куда отправлять информацию, когда нажимаете Enter. Прямо сейчас это будет @event
путь, который не то, что мы хотим. Вместо этого нам нужно сделать что-то вроде:
<%= form_for @event, :url => wizard_path, :method => :put do |f| %>
<% end %>
Это говорит о форме, чтобы перейти к wizard_path
URL, это помощник, который мы предоставляем. Он также сообщает форму для отправки с использованием PUT
Метод HTTP, который должен вызвать ваш def update
действие внутри вашего Events::BuildController
если он настроен правильно. С другой стороны, это не выглядит как События::BuildController имеет update
действие.
Контроллер событий
Ваш контроллер событий выглядит нормально, но вы перенаправляете
redirect_to event_build_path(event_id: "event", id: @event.id)
Злой нуждается в id
параметр, чтобы быть шагом, к которому вы хотите перейти. Так и должно быть:
redirect_to event_build_path(event_id: @event.id, id: :details)
или же
redirect_to event_build_path(event_id: @event.id, id: Wicked::FIRST_STEP)
Вы также можете получить фантазию и перенаправить на действие index, которое выполнит еще одно перенаправление на первый шаг, но я всегда предпочитаю быть явным.
Другие вопросы
Вот кто-то с похожим вопросом: https://github.com/schneems/wicked/issues/141 взгляните на их код и вопрос. Постарайтесь понять, что было не так и как это было исправлено. Затем сравните между тем, что они пытаются сделать, и тем, что вы пытаетесь сделать.
Этот вопрос
Трудно быть более полезным без явного вопроса. Разбив его на я сделал это => Я ожидал этого => Я получил это вместо этого, я попытался отладить с помощью этого. В любом случае, надеюсь, что кое-что из этого было полезно. Возможно, раскрутите другое примерное приложение на Rails и попробуйте просмотреть мое злое руководство в файле readme, оно даст вам больше опыта в том, что злые дела делают (и не делают) для вас.