0

何らかの理由で、データベース担当者は mysql データ型セットを使用することにしました。私はそれをレールで動作させようとしています。これが私たちのコラムです:

actions => set('spoke_to','left_voicemail','emailed')

それを機能させるために、私は次のコードを持っていますが、これははるかに優れていると確信しています:

def actions=(type)
    write_attribute(:actions, pack(type))
  end

  def actions
      read_attribute(:actions).split(",") unless read_attribute(:actions).nil?
  end

  private


  def pack(type)
    acs = self.actions
    if acs.present? && acs.include?(type)
     acs.delete(type)
     delete_actions(acs)
    else
      write_actions(acs, type)
    end
  end

  def delete_actions(acs)
    if acs.empty?
      write_attribute(:actions, nil)
    else
      write_attribute(:actions, acs)
    end
  end

  def write_actions(acs, type)
    debugger
    if acs.present?
      write_attribute(:actions, acs.push(type).join(","))
    else
      write_attribute(:actions, type)
    end
  end

ただし、アクションの設定は問題なく機能しますが、設定を解除しようとすると、次の奇妙なクエリが生成されます。

(72.5ms)  BEGIN
(73.6ms)  UPDATE `service_requests` SET `actions` = '---\n- spoke_to\n- left_voicemail\n' WHERE `service_requests`.`nid` = 69524843
(78.2ms)  COMMIT

そして、私には理由がわかりません。

4

1 に答える 1