Ruby on rails Rails-了解路由

Ruby on rails Rails-了解路由,ruby-on-rails,ruby,rails-routing,wicked-gem,Ruby On Rails,Ruby,Rails Routing,Wicked Gem,好吧,所以我不太理解邪恶宝石中的嵌套路由 到目前为止,我有这个。我不确定是否所有的东西都在正确的文件夹中,或者我做的是否正确 routes.rb resources :events resources :events do resources :build, controller: 'events/build' end 控制器/事件\u controller.rb def create @event = Event.new(event_params)

好吧,所以我不太理解邪恶宝石中的嵌套路由

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

routes.rb

resources :events   
resources :events do
  resources :build, controller: 'events/build' 
end
控制器/事件\u 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
class Events::BuildController < ApplicationController
    include Wicked::Wizard

    steps :details, :visibility

    def show
        @event = Event.find(params[:event_id])
        render_wizard
    end
end
控制器/事件/build_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
class Events::BuildController < ApplicationController
    include Wicked::Wizard

    steps :details, :visibility

    def show
        @event = Event.find(params[:event_id])
        render_wizard
    end
end
class事件::BuildController
views/build/details.html.erb

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

#废话
起初,我的
事件\u构建\u路径
没有参数,因此出现了此错误
没有路由匹配{:action=>“show”,:controller=>“events/build”}缺少必需的键:[:event\u id,:id]

受此影响,但不完全了解路线

我没有设置event_id,也不知道wicked是如何通过id(或者它的event_id)跟踪的


由于我的对象(事件)尚未创建,“事件id”和结尾的id代表什么?

不是真正的答案,而是一些澄清。你要做的事情很难,需要一系列的定制来适应你自己的情况。如果你不喜欢恶作剧,或者那篇教程几乎让人无法理解,那么现在最好不要做向导,等你有时间思考之后,一个月左右再回来试试

形式 这是你邪恶的形态

<%= form_for @event do |f| %>
#blab blah 
<% end %>
这告诉表单转到
向导路径
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) 

您还可以想象并重定向到index操作,这将执行另一个重定向到第一步的操作,但我总是更喜欢显式的

其他问题 这里有人有一个类似的问题:看看他们的代码和他们的问题。试着去理解什么是错误的,以及它是如何被修复的。然后比较他们想做什么和你想做什么

这个问题
如果没有一个明确的问题,很难提供更多的帮助。把它分解成我做了这个=>我期望这个=>我得到了这个,我试着用这个来调试。不管怎样,希望这能对你有所帮助。也许可以启动另一个Rails示例应用程序,并尝试在自述文件中浏览我的wicked教程,它将为您提供更多关于wicked为您做了什么(和没有做什么)的经验。

这不是一个真正的答案,而是一些澄清。你要做的事情很难,需要一系列的定制来适应你自己的情况。如果你不喜欢恶作剧,或者那篇教程几乎让人无法理解,那么现在最好不要做向导,等你有时间思考之后,一个月左右再回来试试

形式 这是你邪恶的形态

<%= form_for @event do |f| %>
#blab blah 
<% end %>
这告诉表单转到
向导路径
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) 

您还可以想象并重定向到index操作,这将执行另一个重定向到第一步的操作,但我总是更喜欢显式的

其他问题 这里有人有一个类似的问题:看看他们的代码和他们的问题。试着去理解什么是错误的,以及它是如何被修复的。然后比较他们想做什么和你想做什么

这个问题
如果没有一个明确的问题,很难提供更多的帮助。把它分解成我做了这个=>我期望这个=>我得到了这个,我试着用这个来调试。不管怎样,希望这能对你有所帮助。也许可以启动另一个Rails示例应用程序,并尝试在自述文件中浏览我的wicked教程,它将为您提供更多关于wicked为您做了什么(和没有做什么)的经验。

谢谢您的回复@Schneems。在它上面睡觉并向上看之后,
event\u id
不应该是我的
@event.id
?否则我怎么知道我在做什么?或者是一些未显示的内容,恶毒已经知道我在哪个事件上。抱歉,这是一个复制错误,我将在上面修复,它应该是
event\u id:@event.id
感谢@Schneems的回复。在它上面睡觉并向上看之后,
event\u id
不应该是我的
@event.id
?否则我怎么知道我在做什么?或者是一些未显示的内容,恶人已经知道我在哪个事件上。抱歉,这是一个复制错误,我将在上面修复,它应该是
event\u id:@event.id