正しい方向に向かっているかどうかはわかりませんが、Web 開発の知識が不足しているため、次のタスクを実行できません。
アプリケーションでは、ユーザーはオブジェクトである設定をセットアップできます。設定コンポーネントで通知 からユーザーを購読または購読解除できます ユーザーのタスクを簡素化するため UX を向上させるために、すべての通知を 1 つのフォームにまとめることにしました。
私はそれが可能であるべきだと信じていますRails-3.2.8
。
だから私たちは持っています
クラス設定 has_many :notifications, :through => :email_notifications has_many :email_notifications
クラス通知 attr_accessible :name、:primary、:secondary has_many :settings, :through => :email_notifications has_many :email_notifications
クラス EmailNotification attr_accessible :notification_id、:setting_id、:primary、:secondary 所属先 : 通知 所属先:設定
すべての通知をインスタンス化し、settings_controller
id をリッチ ジョイン アソシエーションに渡します。
新しい定義 @setting = Setting.new @notifications = Notification.all @notifications.each do |n| @setting.email_notifications.build(:notification_id => n.id) 終わり
次に、私はビューに固執しました(すべての解決策は実行可能ではありませんが、とにかくそれらをリストしているので、解決策とそれが間違っていた場所についてコメントすることができます):
ソリューション #1
<%= form_for @setting, :html => { :class => 'form-horizontal' } do |f| %>
<div class="control-group">
<%= f.label :email_periods, :class => 'control-label' %>
<div class="controls">
<%= f.select :email_periods, ["Daily", "Weekly", "Tuesdays & Thursdays"], :class => 'text_field' %>
</div>
</div>
<table class="table table-striped">
<thead>
<tr>
<th><%= 'Notification' %></th>
<th><%= 'Primary' %></th>
<th><%= 'Secondary' %></th>
<th><%= 'Reminder interval' %></th>
</tr>
</thead>
<tbody>
<% @setting.email_notifications.each do |s| %>
<tr>
<td><%= s.notification.name.to_s.humanize %></td>
<td><%= check_box 'setting[notification_ids]', :primary %></td>
<td><%= check_box 'setting[notification_ids]', :secondary %></td>
<td><%= 'possible ddl' %></td>
</tr>
<% end %>
</tbody>
</table>
<div class="form-actions">
<%= f.submit nil, :class => 'btn btn-primary' %>
<%= link_to t('.cancel', :default => t("helpers.links.cancel")),
settings_path, :class => 'btn' %>
</div>
<% end %>
しかし、実際には使用できない setting[notification_ids] という名前の check_box が返されます。
次に、email_notifications のフォームを作成することを考えました。
解決策 2
<%= form_for @setting.email_notifications do |s| %>
<table class="table table-striped">
<thead>
<tr>
<th><%= 'Notification' %></th>
<th><%= 'Primary' %></th>
<th><%= 'Secondary' %></th>
<th><%= 'Reminder interval' %></th>
</tr>
</thead>
<tbody>
<% @setting.email_notifications.each do |s| %>
<tr>
<td><%= s.notification.name.to_s.humanize %></td>
<td><%= f.check_box s.primary %></td>
<td><%= f.check_box s.secondary %></td>
<td><%= 'possible ddl' %></td>
</tr>
<% end %>
</tbody>
</table>
<%= f.submit nil, :class => 'btn btn-primary' %></br>
<% end %>
しかし、再びエラーが発生します:
undefined method email_notification_..._email_notification_email_notification_email_notifications_path for #<#<Class:0x007f86942d16e0>:0x007f86979e02d0>
次に、form_for を用意email_notification
し、そのフォーム内にそれぞれを構築することにしました。
<%= form_for @setting.email_notifications.build do |s| %>
<table class="table table-striped">
<thead>
<tr>
<th><%= 'Notification' %></th>
<th><%= 'Primary' %></th>
<th><%= 'Secondary' %></th>
<th><%= 'Reminder interval' %></th>
</tr>
</thead>
<tbody>
<% @setting.email_notifications.each do |s| %>
<tr>
<td><%= s.notification.name.to_s.humanize %></td>
<td><%= f.check_box s.primary %></td>
<td><%= f.check_box s.secondary %></td>
<td><%= 'possible ddl' %></td>
</tr>
<% end %>
</tbody>
</table>
<%= f.submit nil, :class => 'btn btn-primary' %></br>
<% end %>
しかし、再びエラー:
#:0x007f86979e02d0> の未定義のメソッド `email_notifications_path'
どんな助けでも大歓迎です。ありがとうございました
PS 何らかの理由で StackOverflow が Ruby スタイルの継承<
を認識しなかったため、例から削除する必要がありました。