将数据传递到邪恶向导中的下一步

时间:2012-05-17 04:39:01

标签: ruby-on-rails wizard

我刚刚看到Railscast上的Wicked gem用于创建多步向导。

我想知道这个gem是否可用于创建一个向导,在render_wizard调用中以某种方式向前传递数据?基于我最初的修补,我不相信这是可能的。我希望解决的问题是创建一个向导,其中第一步采用一个国家,第二步允许从该国家中选择人员。

有没有更简单的方法来解决这个问题?谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

您可以使用无表格的红宝石对象。在每个显示步骤之前将其序列化为会话,并在每个更新步骤之前从会话中加载它(合并在任何新的参数中)。

before_filter :initialize_wizard, on: [:show, :update]

...

def initialize_wizard
  @wizard = YourWizardTempModel.new
  @wizard.update_attributes(session['wizard']) if session['wizard'].present?
  @wizard.update_attributes(params['wizard']) if params['wizard'].present?
  session['wizard'] = @wizard.as_json
end

然后你可以有一个条件的before_filter,根据country_id组合人员选择:

before_filter :populate_people, if: "step == 'select_people'"

...

def populate_people
  People.find_by_country_id(@wizard.country_id)
end