ユーザークラス(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 をロードしようとすると思います。クラスとページをリロードします。
助けてくれてありがとう。