Rails邪恶的宝石重定向与params

时间:2012-10-12 15:11:43

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

我正在使用邪恶的宝石来构建表单向导。在文档中,它使用的是current_user对象,但我想使用其他对象。我正在努力为redirect_to添加一个参数,所以我可以使用这个对象。

products_controller.rb

def create
  @product = current_user.product.build(params[:product])
  @product.ip_address = request.remote_ip

  if @product.save
    redirect_to product_steps_path # This is where I think I need to pass product object but not sure how
  else
    render 'new'
  end
end

product_steps_controller.rb

class ProductStepsController < ApplicationController
  include Wicked::Wizard
  steps :apps, :templates

  def show
    @product = Product.find(params[:id])
    render_wizard
  end
end

路线:

resources :products
resources :product_steps

我使用上面代码得到的错误是:

ActiveRecord::RecordNotFound in ProductStepsController#show

Couldn't find Product with id=apps

如何在这样的特定对象上使用邪恶的gem而不是文档中的current_user示例?

2 个答案:

答案 0 :(得分:5)

这就是我的工作。

products_controller.rb

if @product.save
  redirect_to product_step_path(:id => "apps", : product_id => @ product.id)
else
...

product_steps_controller.rb

def show
  @asset = Asset.find(params[:asset_id])
  render_wizard
end

答案 1 :(得分:0)

向导gem将:id参数作为步骤名称。因此,您不应将:id作为参数传递,因为它会与步骤名称冲突。

<强> products_controller.rb

redirect_to product_step_path(product_id: @product.id)

<强> product_steps_controller.rb

@product = Product.find(params[:product_id])