在Ruby on Rails中构建向导

时间:2012-02-09 12:53:28

标签: ruby-on-rails forms wizard

所以我想在注册时为我的用户构建一个向导。 我不能使用javascript(我发现这种形式的一般解决方案。) 原因是我的向导中的每个页面都依赖于Javascript,这意味着一次加载所有页面需要很长时间。 哦,向导处理3种不同的资源。

我尝试了一种我目前坚持的方法,坦率地说感觉不对。

(SIDENOTE:用户曝光了“体面曝光”宝石)

这是我的向导控制器:

  def index
    case current_step
      when 'description'
        render 'users/edit'
      when 'contact'
        render 'contact_informations/edit'
      when 'location'
        render 'location/edit'
    end
  end

  def current_step
    @current_step || STEPS.first
  end

  def next_step
    @current_step = STEPS[STEPS.index(current_step)+1]
    index
  end

  def previous_step
    @current_step = STEPS[STEPS.index(current_step)-1]
    index
  end

  def final_step
    @current_step == STEPS.last
  end

然后我对每个资源都有一个更新操作(这是同一个向导 - 控制器)

 def update_description

    if user.update_attributes(params[:user])
      next_step
    else
      redirect_to user_wizard_path(user)
    end
  end

  def update_contact_information
    # Do stuff here
  end

  def update_location
    # Do stuff here
  end

在同一控制器中调用操作似乎存在问题。 基于此我以前从未见过这样做,感觉不对。

我想简单地完成的事情: 我不想混淆最初的资源REST控制器。 我希望每一步都得到验证 如果update_attributes失败,请重新呈现包含错误的表单。 如果update_attributes成功渲染下一步。

我得出的结论是,我对此的镜头不起作用,并且感觉不像做事的“轨道”。 我看过Ryan Bates关于“多步形式”的转播,但即使在那之后,我似乎无法弄清楚这一点。

提前致谢。 添

1 个答案:

答案 0 :(得分:3)

查看邪恶的宝石,你可能会发现它很有用

https://github.com/schneems/wicked