2

在我看来,我有一个可以分配票证的下拉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 => "&lt; Unassigned &gt;"} ) %>

因为上面插入的空白没有任何价值,如果选择该选项,那么票证将保持分配给同一个人。

我考虑过在数据库中创建一个“未分配”的人,但是让那个“人”属于每个组织可能会很复杂......

我也考虑过使用 JavaScript 来操作 DOM 并给它一个值,但我想用“Rails 方式”来做这件事,所以我想出了以下内容:

票证.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所以有些东西不太正确,我不确定错误是什么。

我还考虑update通过检查 [:params][:assigned_support_id] 来更新我的控制器中的方法,但认为上面是一个更简洁的解决方案。

4

2 回答 2

1

如果 salf.assigned_support_id 存在,那么它在“定义?”下是真的......

所以你有任何代码

if (some_irrelevant_evaluation) or defined?(self.assigned_support_id) 

总是会评估为真。

于 2013-08-09T14:14:52.550 回答
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: "&lt; Unassigned &gt;"}) %>
<% end %>
于 2013-08-09T14:18:29.253 回答