0

好的,所以我不太了解 wicked gem 中的嵌套路由。

到目前为止,我有这个。我不确定所有内容是否都在正确的文件夹中,或者我是否做对了。

路线.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 wicked gem 重定向的影响,但不完全理解路由

我没有设置 event_id,我也不明白 wicked 如何跟踪通过 id 的步骤(或者如果它的 event_id)。

由于我的对象(事件)尚未创建,“event_id”是什么,最后的id代表什么?

4

1 回答 1

6

不是真正的答案,而是一些澄清。您尝试做的事情非常困难,并且需要进行大量自定义以适合您自己的情况。如果您对 wicked 不满意,或者如果该教程几乎无法理解,那么最好暂时跳过执行向导,并在您有时间思考后一个月左右再回来尝试.

形式

这是你邪恶的形式

<%= form_for @event do |f| %>
#blab blah 
<% end %>

Wicked 通过做两件事来工作,将状态存储在您的 url 中domain.com/build_pah/<step>,并为您提供帮助方法来轻松操作当前状态。渲染表单后,您需要告诉浏览器在按下输入时将信息提交到何处。现在它正在走向@event路径,这不是我们想要的。相反,我们需要执行以下操作:

<%= form_for @event, :url => wizard_path, :method => :put do |f| %>

<% end %>

这告诉表单转到wizard_pathurl,这是我们提供的帮助程序。它还告诉表单使用PUTHTTP 方法提交,如果设置正确,它应该会在你的def update内部触发你的操作。Events::BuildController另一方面,它看起来不像 Events::BuildController 有一个update动作。

事件控制器

您的事件控制器看起来不错,但是您正在重定向

redirect_to event_build_path(event_id: "event", id: @event.id) 

Wicked 需要将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)

您还可以花哨并重定向到索引操作,这将再次重定向到第一步,但我总是更喜欢明确。

其他问题

这是有类似问题的人:https ://github.com/schneems/wicked/issues/141看看他们的代码和他们的问题。尝试了解哪里出了问题以及如何解决。然后比较他们想要做什么和你想要做什么。

这个问题

如果没有明确的问题,很难更有帮助。把它分解成我做了这个 => 我期待这个 => 我得到了这个,我尝试使用这个进行调试。Anywhoo,希望其中一些有用。也许启动另一个 Rails 示例应用程序并尝试浏览我在自述文件中的 wicked 教程,它会给你一些关于 wicked 为你做什么(和不做什么)的经验。

于 2014-11-07T19:34:28.297 回答