使用选择参数的表单

时间:2012-12-26 18:30:23

标签: ruby-on-rails forms

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>

1 个答案:

答案 0 :(得分: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]回调(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属性的表单部分。

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