是否有一个较短的名称Rails find_or_initialize_by_this_that_and_theotherthing?

时间:2010-03-09 19:04:52

标签: ruby-on-rails activerecord

我在一些地方使用活动记录find_or_intialize(类似于find_or_create),这导致令人讨厌的长不可破解的方法名称。例如,“find_or_initialize_by_topic_id_and_publish_date_and_publist_id”真的搞砸了我的格式。我知道使用普通的find方法我可以提供所有这些东西作为参数。这个方法有更可读的版本吗?

1 个答案:

答案 0 :(得分:0)

您可以实现缺少方法来解析方法名称并从缩写中重构长方法:

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

我没有运行这个,但它应该足以让你知道。