1

MrYoshijiと私はそれを解決します。彼の答えの上の私たちのコメントを見てください

_form.html.erbコードの一部を追加しました。

次の3点をお願いします。

1) @admin_mail は、ユーザーが記入するよう求められる admin_mail になります (「admin_mail」のオプションを表示したくありませんが、admin_mail は @admin_mail になります)

2) user_mail を選択するためのオプションがあります。選択肢が user_mail に挿入されるようにします。

3) 'done' は false で自動的に表示されます (表示されません)。

<div class="field">
    <%= @admin_mail %>
    <%= f.label :admin_mail %><br />
    <%= f.text_field :admin_mail %>
</div>

<div class="field">
   <select>
     <% @workers.group_by(&:email).each do |email, tasks| %>
        <option value="<%= email %>"><%= email %></option>
     <% end %>
   </select>
   <%= f.label :worker_mail %><br />
   <%= f.text_field :worker_mail %>
</div>

<div class="field">
  <%= f.label :task %><br />
  <%= f.text_area :task %>
</div>

<div class="field">
  <%= f.label :done %><br />
  <%= f.check_box :done %>
</div>

<div class="actions">
  <%= f.submit %>
</div>

デフォルトで完了 (false) の check_box を設定するには、次のように定義する必要があると思います。

t.boolean :done, :default => false

フォームから次の行を削除します。

<div class="field">
  <%= f.label :done %><br />
  <%= f.check_box :done %>
</div>
4

1 に答える 1

2

2):

f.select選択ボックスとオプションを生成するために使用できます。

f.select :worker_mail, @workers.map{ |c| [c.email, c.email] }

コードのこの部分の代わりに:

<select>
  <% @workers.group_by(&:email).each do |email, tasks| %>
    <option value="<%= email %>"><%= email %></option>
  <% end %>
</select>

3):

作成時に "done" 属性を false に設定します: コールバックを使用でき[after_create][2]ます (一般的なコールバック ドキュメントへのリンク)。次のように使用するコールバックです。

class Task < ActiveRecord::Base
  # ...
  after_create :set_done_to_false

  def set_done_to_false
    self.update_attributes(done: false)
  end
end

そうすれば、done 属性に関するフォームの部分を表示する必要はありません。

1):

コードの代わりに:

<div class="field">
    <%= @admin_mail %>
    <%= f.label :admin_mail %><br />
    <%= f.text_field :admin_mail %>
</div>

値 = @admin_email の hidden_​​field を使用します。

 f.hidden_field :admin_mail, :value => @admin_mail 
于 2012-12-26T19:01:12.960 に答える