2012-08-09 80 views
2

我需要將兩個實例變量傳遞給正在由ajax請求用來更新用戶顯示的JavaScript文件。這是我需要做的:將兩個實例變量傳遞給js.erb文件?

respond_to do |format| 
    if @post.save 
     format.js { @post @user_vote } # <-- right here 
    else 
     format.html { redirect_to :back, :alert => 'There was an error in removing the vote' } 
    end 
end 

這是如何完成的?

回答

6

如果您使用js.erb文件,則不需要傳遞實例變量。您可以直接把軌道標記和訪問js.erb文件中的變量

如:

在你的控制器只是把

format.js #instead of format.js { @post @user_vote } 

和js.erb文件,您可以訪問實例變量爲

$('#ele').html("<%= @post.name %>"); 
2

ActionController操作中的實例變量在視圖中以自動方式提供。例如。控制器:

# posts_controller.rb 
def update 

    # Your implementation here 
    @post = ... 
    @user_vote = ... 

    respond_to do |format| 
    if @post.save 
     format.js 
     format.html { redirect_to post_path(@post) } 
    else 
     format.js { ... } 
     format.html { redirect_to :back, ... } 
    end 
    end 
end 

然後在您的update.js.erb:

# update.js.erb 
console.log('Post: <%= @post.inspect %>'); 
console.log('User vote: <%= @user_vote %>'); 

# Your JS implementation here 

(另外我注意到你的邏輯在respond_to代碼塊可能會導致問題,您應該呈現兩個JS和HTML。格式爲@post.save的成功和失敗條件。)