如何在Rails中加载多页面表单的部分内容



我正在尝试转换Railscast #217。我想更改一个多部分表单,以便它使用AJAX加载部分。我有一个用户可以注册的网站。我有一个由三个部分组成的注册表单(_step1.html)。Erb thr_step3 .html. Erb).

用户。rb包含一个局部名称和方法数组,用于转到下一步和上一步:

def current_step
  @current_step || steps.first
end
def steps
  %w[step1 step2 step3]
end
def next_step
  self.current_step = steps[steps.index(current_step) + 1]
end
def previous_step
  self.current_step = steps[steps.index(current_step) - 1]
end
def first_step?
  current_step == steps.first
end
def last_step?
  current_step == steps.last
end

new动作初始化为:

def new
  @user = User.new
  session[:user_step] = nil
end
create操作是在下一步和上一步之间移动的:
def create
  @user = User.new(params[:user])
  respond_to do |format|
    format.js do
      @user.current_step = session[:user_step]
      if params[:prev_button]
        @user.previous_step
      elsif @user.last_step?
        @user.save
      else
        @user.next_step
      end
      session[:user_step] = @user.current_step
    end
  end
end

new.html。erb files在单击表单上的'Next'时呈现以下部分:

<%= form_for(@user, :html => { :class => "form-horizontal" }, remote: true) do |f| %>
<div id="partial">
  <%= render @user.current_step, :f => f %>
</div>
<%= f.submit "Previous", class: "btn btn-primary", :name => "prev_button"   %>
<%= f.submit "Next", class: "btn btn-primary", :name => "next_button" %>
我的<<p> strong> create.js。erb是这样的
$("#partial").html("<%= escape_javascript(render @user.current_step) %>");

我想我遇到的问题可能是当create和new action被调用的时候?当我在路由users/new时,我填写表格并单击"下一步"。然后,当我在部分步骤2,点击"下一步",我移动到部分3。我可以回到偏2但是当我尝试在偏2上点击前一个时什么都没有发生。我不会被送回偏1。现在不管我在路由上的是什么偏还是说users/new但是我知道create动作被调用了因为我可以在偏2和偏3之间切换而不是回到偏1。现在第2部分和第3部分只有文本,但第1部分看起来像这样:

<div class="control-group">
  <%= f.label :first_name, :class => 'control-label' %>
  <div class="controls">
    <%= f.text_field :first_name, class: 'required' %>
  </div>
</div>
<div class="control-group">
  <%= f.label :last_name, :class => 'control-label' %>
  <div class="controls">
    <%= f.text_field :last_name, class: 'required' %>
  </div>
</div>

任何想法?

我想我看到问题了。当我加载第2部分和第3部分时,我只渲染文本。但是在第1部分中,我需要渲染<%=和%>。有什么办法解决这个问题吗?

你实际做了什么?

我确实看到你正在设置current_step,然后在调用next_step之后,它再次设置current_step。然后在js中再次调用next_step。Erb文件,这意味着current_step在每次通过时更改3次。

所以当你看到问题时,current_step可能远远超出了你的3个步骤。

相关内容

  • 没有找到相关文章

最新更新