2

リンクがクリックされるたびにRailsでパーシャルを更新したいのですが、何もしていないようです。

誰かがエラーを見つけることができますか?

index.html.erb

<% @users.each do |u| %>
   <% if !u.nil? and u.department_id == department.id %>
      <%= link_to "#{u.first_name} #{u.last_name}", professor_refresh_path(u.id), remote: true %>
   <% end %> 
<% end %>
<div id="profile"></div>

_profile.html.erb

Hello, <%= user %>

refresh.js.erb

$('#profile').html('<%=j render partial: "/professors/profile", locals: {user: @user} %> ');

Professors_controller.rb

    def refresh
      @user = @user + 1
        respond_to do |format|
          format.html
          format.js
      end
    end

ルート.rb

    resources :professors do
      get 'refresh'
    end
4

4 に答える 4

1

まず、ur refresh.js.erb でプロファイルをクラスとして指定しました。それはIDでなければなりません。使ってみて

$('#profile').replaceWith("#{escape_javascript(render partial: 'professors/profile', locals: { user: @user })}"); 

@user は refresh メソッドの唯一のインスタンス変数であるためです。また、refresh メソッドの ur コードから、カウントを更新しているように見えます。したがって、パーシャル全体を置き換えるのではなく、ビューの値を新しい値で更新することをお勧めします。

于 2013-06-18T17:07:28.830 に答える
0
def refresh
    @user = @user + 1
    render :partial => "/professors/profile"
  end

私の知る限り、@userここでは未定義になります。@user=nil+1

コントローラーからパーシャルをレンダリングすることはできません。コントローラーはファイルの表示に応答できます。

def refresh
    @user=User.find(params[:id]) #you need to take data from database
    @user = @user + 1
   respond_to do |format|
   format.html
   end
  end

ビュー/教授/refresh.html.erb

Hello "<%= @user %>"

PSビューからスクリプトを削除し、アセットのproffesors.jsに追加してください。これは良い習慣です。

JS 関数を書き直します。html ファイルから削除し、profile_linksこれらのリンクにクラスを追加し、proffesors.js (アセット内) に 追加します。$('.profile_links).click(function() {$("#profle").load('professors/refresh.html'}

PPS

refreshまた、ルートに追加する必要があることに注意してください

resourse :professors do
get 'refresh'
end
于 2013-06-17T16:14:41.080 に答える
0

これがあなたがやりたいことかどうかはわかりませんが、UJSを使用することはpartialロードを行うレールの方法です

持ってる

def refresh
    @user = @user + 1

 respond_to do |format|
  format.html
 format.js
end
  end

refresh.js.erb を持っていて、それをapp/views/professors 中に入れて

$('.profile').html('<%=j render partial: "/professors/profile", locals: {user: @user} %> ');

ローカルを提供する必要はありませんが、維持するのは簡単です。その場合、パーシャルを次のように変更します

Hello "<%= user %>"

userの値を取得するパーシャルのローカル変数になったので@user

次に、JS ボタンを remote: true にすることができます。

<%= link_to "#{u.first_name} #{u.last_name}", professors_refresh_path(u), remote: true %>

パスが問題ないことを確認してください

これにより、タイプ js で更新アクションが呼び出され、refresh.js.erb が起動され、そこで js が機能します。

タイムアウトでそれを行うには、jquery ajax get with javascript タイプを使用する必要があります。accept ヘッダーを設定して、こちらの回答と同様にjQuery ajax request not triggering JS response from rails controller?

于 2013-06-17T16:18:27.620 に答える