1

正しい方向に向かっているかどうかはわかりませんが、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_controllerid をリッチ ジョイン アソシエーションに渡します。

新しい定義
  @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 スタイルの継承<を認識しなかったため、例から削除する必要がありました。

4

0 に答える 0