2013-01-11 47 views
0

我想在我的create操作中加載使用AJAX的部分。從教程中我知道這樣做的方法是在respond_to塊中單獨包含format.js行,並創建create.js.erb文件。但我的代碼在我需要執行的create操作中。如果我將所有這些代碼放入format.js {}塊中,則不會加載該部分。我想我不確定這個區塊應該包含什麼內容?format.js vs Rails中的format.html

這類作品:

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?不能正常工作,一旦我加載部分。

create.js.erb

$("#partial").html("<%= escape_javascript(render('step2')) %>"); 

我真正想要的是這樣的:render(@user.current_step)

+0

顯示如何調用ajax。類型必須是腳本才能調用js.erb。另外,只用一個警報('Test')測試js.erb; –

+0

好的,我添加了我的其他代碼。 – mikeglaz

回答

1

你可以做你所有的邏輯,然後處理正確的格式。此外,您可以爲視圖使用多種格式。

There is和示例從散居的源代碼:

def create 
    post = current_user.find_visible_shareable_by_id(Post, params[:post_id]) 
    @comment = current_user.comment!(post, params[:text]) if post 

    if @comment 
     respond_to do |format| 
     format.json{ render :json => CommentPresenter.new(@comment), :status => 201 } 
     format.html{ render :nothing => true, :status => 201 } 
     format.mobile{ render :partial => 'comment', :locals => {:post => @comment.post, :comment => @comment} } 
     end 
    else 
     render :nothing => true, :status => 422 
    end 
    end 

如果事情在頁面失敗,因爲用戶停留反正你不應該做任何重定向。但您可能需要使用客戶端驗證。

因此,您可以使用format.js作爲您的成功案例,並使用partial重新加載部分HTML。例如:

# create.js.erb 
$("#js-user-panel").html("<%= j render("users/panel", :user => @user %>"); 
# ... create div with flash message here and etc. 
0

我想你要加載部分在new的頁面,所以做了new行動,而不是create 。按照你說的方式去做。

相關問題