Cla*_*lam 0 ruby ruby-on-rails rails-routing wicked-gem
好吧,所以我真的不了解邪恶的宝石中的嵌套路由.
到目前为止,我有这个.我不确定是否所有内容都在正确的文件夹中,或者我是否正确.
的routes.rb
resources :events
resources :events do
resources :build, controller: 'events/build'
end
Run Code Online (Sandbox Code Playgroud)
控制器/ 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
Run Code Online (Sandbox Code Playgroud)
控制器/活动/ 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
Run Code Online (Sandbox Code Playgroud)
意见/编译/ details.html.erb
<%= form_for @event do |f| %>
#blab blah
<% end %>
Run Code Online (Sandbox Code Playgroud)
我一开始event_build_path没有参数,我有这个错误
No route matches {:action=>"show", :controller=>"events/build"} missing required keys: [:event_id, :id]
有这个Rails的影响邪恶的宝石重定向与params但不完全理解路由
我没有设置event_id,我真的不明白恶人如何跟踪通过id(或者如果是event_id)的步骤.
由于我的对象(事件)尚未创建,"event_id"和最后的id表示什么?
不是一个答案,而是一些澄清.你要做的事情非常困难,需要一堆自定义以适应你自己的情况.如果你对邪恶感到不舒服,或者那个教程几乎无法理解,那么现在跳过做一个向导可能会更好,并且一旦你有时间冥想它就会在一个月左右再回来再试一次.
这是你邪恶的形式
<%= form_for @event do |f| %>
#blab blah
<% end %>
Run Code Online (Sandbox Code Playgroud)
Wicked通过做两件事来工作,在你的url中存储状态domain.com/build_pah/<step>并为你提供帮助方法来轻松操纵当前状态.渲染表单后,您需要告诉浏览器在按下enter时将信息提交到哪里.现在它将走向@event道路,这不是我们想要的.相反,我们需要做类似的事情:
<%= form_for @event, :url => wizard_path, :method => :put do |f| %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
这告诉表单转到wizard_pathurl,这是我们提供的帮助器.它还告诉表单使用PUTHTTP方法提交,如果设置正确,它将触发您的def update操作Events::BuildController.另一方面,它看起来不像Events :: BuildController有一个update动作.
您的事件控制器看起来很好,但是您正在重定向
redirect_to event_build_path(event_id: "event", id: @event.id)
Run Code Online (Sandbox Code Playgroud)
邪恶需要id参数成为你想去的步骤.所以它应该是:
redirect_to event_build_path(event_id: @event.id, id: :details)
Run Code Online (Sandbox Code Playgroud)
要么
redirect_to event_build_path(event_id: @event.id, id: Wicked::FIRST_STEP)
Run Code Online (Sandbox Code Playgroud)
您还可以获得幻想并重定向到索引操作,这将执行另一个重定向到第一步,但我总是喜欢明确.
这是一个有类似问题的人:https://github.com/schneems/wicked/issues/141看看他们的代码和他们的问题.试着了解错误是什么以及修复方法.然后比较他们想要做什么和你想做什么.
没有明确的问题,很难提供更多帮助.把它分解成我做了这个=>我期待这个=>我得到了这个,我试着用这个来调试.Anywhoo,希望其中一些有用.也许启动另一个Rails示例应用程序,并尝试在自述文件中浏览我的邪恶教程,它将为您提供更多经验,了解恶人为您做什么(和不做).
| 归档时间: |
|
| 查看次数: |
1517 次 |
| 最近记录: |