0

ユーザーが送信メールに含まれる件名とメッセージを入力できるようにする部分的なフォームがあります。ユーザーが、電子メールが属する請求書に関連付けられている連絡先から電子メールの受信者を選択できるようにしたいと考えています。ネストされたフォームで選択された電子メール受信者は、別のテーブルに保存されます。

class EmailRecipient < ActiveRecord::Base
  attr_accessible :contact_id, :email_id

  belongs_to :email

end

class Email < ActiveRecord::Base
  attr_accessible :subject, :message, :invoice_id, :email_recipients_attributes

  belongs_to :invoice
  has_many :email_recipients

  accepts_nested_attributes_for :email_recipients

end

<%= simple_form_for [:invoice, @email], html: {class: "form-horizontal"} do |f| %>
  <%= f.error_notification %>

  <% @invoice.contacts do |c|%>
    <%= f.fields_for :email_recipients do |builder| %>
      <%= builder.input :contact_id, :as => :check_boxes %>
      <%= c.name %><br/>    
    <% end %>
  <% end %>

  <%= f.input :subject, :as => "string" %>
  <%= f.input :message, :input_html => { :class => 'span7', :rows => 10 } %>

  <div class="form-actions">
    <%= f.button :submit, "Send Invoice", :class => 'btn-warning' %>
    <%= link_to 'Cancel', invoice_path(@invoice), :class => 'btn' %>
  </div>
<% end %>
4

1 に答える 1

0

これは最も美しい答えではないので、より良い解決策を見つけたいと思っていますが、私のスキルが向上するまで仕事を終わらせることができます.

私が追加した親フォームのコントローラーで:

@invoice.contacts.each { |c| @email.email_recipients.build(contact_id: c.id) }

これにより、必要かどうかに関係なく、すべての連絡先のレコードが作成されます。次に、部分的なフォームで、ネストされたフォームを変更しました。

<%= simple_form_for [:invoice, @email], html: {class: "form-horizontal"} do |f| %>
  <%= f.error_notification %>
  <% count = 0 %>
  <%= f.simple_fields_for :email_recipients do |email_recipients_form| %>
    <%= email_recipients_form.input :_destroy, as: :boolean, :label => false do %>
      <%= email_recipients_form.check_box :_destroy, {}, "false", "true" %>
      <% contact = @invoice.contacts.find(@email.email_recipients[count].contact_id) %>
      <%= contact.name + " (" + contact.email + ")" %>
    <% end %>
  <%= email_recipients_form.input :contact_id, as: :hidden %>
  <% count += 1 %>
<% end %>
于 2012-11-23T23:31:11.900 に答える