MrYoshiji和我解决了,请参阅我们上面对他的回答的评论
我添加了_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>
我认为为了默认设置check_box(false),我必须定义:
t.boolean :done, :default => false
并从表单中删除下一行:
<div class="field">
<%= f.label :done %><br />
<%= f.check_box :done %>
</div>
答案 0 :(得分: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>
在创建时将属性“done”设置为false :
您可以使用[after_create][2]
回调(link to the callbacks doc in general)。这是一个回调使用:
class Task < ActiveRecord::Base
# ...
after_create :set_done_to_false
def set_done_to_false
self.update_attributes(done: false)
end
end
然后您不需要显示有关done属性的表单部分。
而不是你的代码:
<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