Rails Wicked Gem - 了解路由

时间:2014-11-07 00:55:08

标签: ruby-on-rails ruby rails-routing 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

views / build / 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 redirect with params的影响,但不完全理解路由

我没有设置event_id,而且我真的不明白恶人如何跟踪通过id(或者如果是event_id)的步骤。

由于我的对象(事件)尚未创建,所以&#34; event_id&#34;并且最后的id代表?

1 个答案:

答案 0 :(得分:5)

不是答案,而是一些澄清。您尝试做的事情非常困难,并且需要一系列自定义以适合您自己的情况。如果你对恶人感到不舒服,或者该教程几乎无法理解,那么现在最好不要再做一个向导,并且在你有时间后一个月左右再回来再试一次冥想它。

表格

这是你的邪恶形式

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

Wicked通过做两件事来工作,在你的网址domain.com/build_pah/<step>中存储状态,并为你提供帮助方法来轻松操纵当前状态。渲染表单后,您需要告诉浏览器在按下enter时将信息提交到哪里。现在它将转向@event路径,这不是我们想要的。相反,我们需要做类似的事情:

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

<% end %>

这告诉表单转到wizard_path网址,这是我们提供的帮助。它还告诉表单使用PUT HTTP方法提交,如果设置正确,则会在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看看他们的代码和他们的问题。试着了解错误是什么以及修复方法。然后比较他们尝试做什么和你想做什么。

这个问题

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