2012-08-09 81 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的成功和失败条件。)