2

我需要将两个实例变量传递给一个 ajax 请求正在使用的 javascript 文件来更新用户显示。这是我需要做的:

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 

这是怎么做到的?

4

2 回答 2

7

如果您使用 js.erb 文件,则无需传递实例变量。您可以直接放置 rails 标签并在 js.erb 文件中访问这些变量

例如:

在你的控制器中放

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

在 js.erb 文件中,您可以访问实例变量

$('#ele').html("<%= @post.name %>");
于 2012-08-09T10:54:12.547 回答
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。)

于 2012-08-09T10:53:36.440 回答