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, оно даст вам больше опыта в том, что злые дела делают (и не делают) для вас.

Другие вопросы по тегам