我想在我的create
操作中使用 AJAX 加载部分内容。从教程中我知道这样做的方法是将行format.js
单独包含在respond_to
块中并创建一个create.js.erb
文件。但是我的create
操作中有需要执行的代码。如果我将所有这些代码放在一个format.js {}
块中,则不会加载部分代码。我想我不确定这个块中应该包含什么?
这类作品:
def create
respond_to do |format|
format.html do
session[:user_params].deep_merge!(params[:user]) if params[:user]
@user = User.new(session[:user_params])
@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
if @user.new_record?
render :new
else
session[:user_step] = session[:user_params] = nil
flash[:success] = "Welcome to Friends First!"
redirect_to @user
end
end
format.js
end
end
我的new.html.erb看起来像这样:
<%= form_for(@user, :html => { :class => "form-horizontal" }, remote: true) do |f| %>
<%= render 'shared/error_messages' %>
<div id="partial">
<%= render "#{@user.current_step}", :f => f %>
</div>
<div class="control-group">
<div class="controls">
<%= f.submit "Previous", class: "btn btn-primary", :name => "prev_button" unless @user.first_step? %>
<%= f.submit "Next", class: "btn btn-primary" %>
</div>
</div>
但是由于某种原因@user.first_step?
,一旦我加载部分内容就无法工作。
创建.js.erb
$("#partial").html("<%= escape_javascript(render('step2')) %>");
我真正想要的是:render(@user.current_step)