在我看来,我在people
内有organisation
的下拉列表,可以分配票证。
<label for="assigned_support_id">Assigned To</label>
<%= select( "ticket", "assigned_support_id", Person.find_admin_and_support.collect {|p| ["#{p.name}", p.id]}, {:include_blank => "< Unassigned >"} ) %>
由于上面插入的空白没有值,如果选择了该选项,则故障单将保持分配给同一个人。
我考虑在数据库中创建一个“未分配”的人,但如果'人'属于每个组织,那可能会非常复杂....
我还考虑使用JavaScript来操作DOM并赋予它一个值,但我想这样做'Rails Way'所以我想出了以下内容:
ticket.rb
before_save :check_unassigned
...
private
def check_unassigned
if self.assigned_support_id.nil? or defined?(self.assigned_support_id)
self.assigned_support_id = 0
end
end
nil
检查似乎没有做任何事情,所以我添加了defined
检查,但问题是,每次我将一张票重新分配给另一个用户时,该表将更新为0
所以事情不太正确,我不确定这是什么错误。
我还考虑通过检查[:params] [:assigned_support_id]来更新控制器中的update
方法,但认为以上是一个更简洁的解决方案。
答案 0 :(得分:1)
如果存在salf.assigned_support_id,那么在'defined?'下它是真的......
所以您拥有的任何代码
if (some_irrelevant_evaluation) or defined?(self.assigned_support_id)
总是评估为真。
答案 1 :(得分:0)
我愿意:
if self.assigned_support_id.nil? or self.assigned_support_id.blank?
如果您选择空白选项并将其传回表单,则可能会传递空白字符串。
尝试将表单重新修改为以下内容:
<%= form_for @organization do |f| %>
<%= f.label :assigned_support_id %>
<%= f.collection_select(:assigned_support_id, Person.find_admin_and_support, :id, :name, {include_blank: "< Unassigned >"}) %>
<% end %>