代码之家  ›  专栏  ›  技术社区  ›  Kevin Peterson

Rails的find或initialize有一个较短的名字吗?

  •  1
  • Kevin Peterson  · 技术社区  · 15 年前

    我在一些地方使用了活动记录find_或_initialize(类似于find_或_create),这会导致不可破坏的方法名过长。例如,“find_or_initialize_by_topic_id_and_publish_date_and_publist_id”真的弄乱了我的格式。我知道用普通的find方法我可以提供所有这些参数。这个方法有更可读的版本吗?

    1 回复  |  直到 15 年前
        1
  •  0
  •   Sniggerfardimungus    15 年前

    您可以实现missing方法来解析方法名,并从缩写的方法重建长的方法:

    finit_b_tid_n_pubdte_npubid(....)
    

    你只需要确定下划线之间的每一个速记是什么:

    def method_missing(id, *args)
      fields_in = id.split(/_/)
      fields_out = []
      fields.each do |f|
        case f
          when "finit"
            fields_out <<= "find_or initialize"
          when "b"
            fields_out <<= "by"
          when "n"
            fields_out <<= "and"
          when.....
             .....
        end 
      end
      send(fields_out.join("_"), args)
    end