1

Yoshiji 先生和我解决了它,请参阅我们上面对他的回答的评论

我添加了我的_form.html.erb代码的一部分。

我想要三样东西:

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),我必须定义:

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):

在创建时将属性“完成”设置为 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 回答