Rails Wicked Gem – 了解路由

好的,所以我真的不了解邪恶的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

  #blab blah  

event_build_path没有参数的event_build_path ,我有这个错误No route matches {:action=>"show", :controller=>"events/build"} missing required keys: [:event_id, :id]

如果这个Rails的影响是邪恶的gem重定向与params但不完全理解路由

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

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

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

形成

这是你邪恶的forms

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

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

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

这告诉表单转到wizard_path url,这是我们提供的帮助器。 它还告诉表单使用PUT HTTP方法提交,如果设置正确,它应该在您的Events::BuildController内触发def update操作。 另一方面,它看起来不像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示例应用程序,并尝试在自述文件中浏览我的邪恶教程,它将为您提供更多经验,了解恶人为您做什么(和不做)。