1

ユーザークラス(deviseを使用)があり、ユーザークラスにはメールサブスクリプションがあります

class User < ActiveRecord::Base
  ...
  has_one :email_sub, :class_name => "Subscriptions::EmailSub", :dependent => :destroy

end

ルートがあります

match 'profile', :controller => 'users', :action => 'view_profile'

および特定のファイルを呼び出す関連コントローラー

class UsersController < ApplicationController

  def profile
    @subscriptions_email_sub = current_user.email_sub
  end

end

また、profile.html.erb ファイルには、ユーザーがラジオ ボタンを使用して購読オプション (購読または購読解除) を設定できるフォーム (技術的にはテンプレートに部分的に含まれていますが、違いはないと思います) があります。フォームのボタン部分は次のとおりです。

  <%= form_for(@subscriptions_email_sub) do |f| %>
    ...
    <tr>
      <td>Announcements</td>
      <td><%= f.radio_button :announcements, 'announcements', :checked => @subscriptions_email_sub.announcements %></td>
      <td><%= f.radio_button :announcements, 'announcements', :checked => !@subscriptions_email_sub.announcements %></td>
      <td></td>
      <td>Updates about the website and service</td>
    </tr>
    <%= f.submit "Update Subscriptions", :id => 'update_subs' %>
  <% end %>

私はcoffeescriptを追加しようとしているので、ユーザーがボタンをクリックするとモデルが保存され、設定が更新されたことをユーザーに通知します(またはエラーがある場合はアラート)。

(または、モデルを保存してページ全体をリロードしても問題ありません。)

これまでのところ、users.js.coffee にあります

$ ->
  $('#update_subs').click ->
    $('form').submit();

ページをリロードする方法がわかりません。フォームの送信により、Subscriptions::EmailSub のコントローラーが使用され、app/views/subscriptions/email_subs/show.html.erb をロードしようとすると思います。クラスとページをリロードします。

助けてくれてありがとう。

4

1 に答える 1

0

でそのコードは必要ありませんusers.js.coffee。フォームをリモートにすることができます。

<%= form_for(@subscriptions_email_sub), :remote => true do |f| %>

これにより、フォームが非同期的に送信され、JS の応答が期待されます (JSON などの別のコンテンツ タイプを指定しない限り)。

この更新を処理するには、コントローラー アクションが必要ですSubscriptionsController

JavaScript リクエストに応答する必要があります。

class SubscriptionsController < ApplicationController
  respond_to :js
  ...

  def update
    @subscription = Subscription.find(params[:id])
    ...

    respond_with(@subscription)
  end
end

次にupdate.js.coffee、通常の JavaScript の場合と同様に、views/subscriptions フォルダーにファイルを追加し、そこにある DOM に必要な変更を追加するだけです。

# update.js.coffee
alert "Email subscription updated!"
$('form').ignite_fireworks()
于 2012-12-05T02:32:25.747 に答える