2

ユーザー表示を更新するために ajax リクエストで使用されている JavaScript ファイルに 2 つのインスタンス変数を渡す必要があります。これは私がする必要があることです:

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 に答える