代码之家  ›  专栏  ›  技术社区  ›  martincarlin87

RubyonRails-方法名称与ActiveRecord方法相同

  •  0
  • martincarlin87  · 技术社区  · 11 年前

    在我的Rails模型中,我有一个 description 方法:

    def description
      if self.channels.nil?
        return self.allowed_ip_addresses
      else
        return self.channels.to_s + ' channels - ' + self.allowed_ip_addresses
      end
    end
    

    我有很多模型,我在其中创建了 描述 方法,该方法基于该模型的其他财产返回一些有用的信息。

    我刚刚意识到的问题是,这种型号尤其有 描述 列,所以我只是想知道解决这个问题的最佳方法,我环顾四周,但没有发现任何有用的东西。

    我想到的第一件事是在打电话时传递一个论点 描述 ,例如。

    def description(table_value = 0)
      if table_value
        return self.description
      end
    
      if self.channels.nil?
        return self.allowed_ip_addresses
      else
        return self.channels.to_s + ' channels - ' + self.allowed_ip_addresses
      end
    end
    

    但很快意识到这毫无意义,因为它只会调用 描述 方法递归和die(假设 1 与对的调用一起传递 描述 ).

    我也可以更改表列名,但它在其他地方使用,所以我只是想看看是否有其他解决方案。

    2 回复  |  直到 11 年前
        1
  •  2
  •   Marek Lipka    11 年前

    我一定会重新命名你的自定义 description 方法

        2
  •  0
  •   Peter Brown    11 年前

    Ruby有“超级”的概念,它允许您调用父类或模块中的方法。在Rails中,Active Record允许您通过重写“column方法”来利用这一点,并且仍然可以通过调用super来获取数据库值。从您的问题中还不清楚您希望在什么条件下使用数据库值以及何时使用自定义逻辑。这里有一些伪代码可以让你开始:

    def description
      return super if Use Database Value?
    
      if self.channels.nil?
        return self.allowed_ip_addresses
      else
        return self.channels.to_s + ' channels - ' + self.allowed_ip_addresses
      end
    end