我在一些地方使用活动记录find_or_intialize(类似于find_or_create),这导致令人讨厌的长不可破解的方法名称。例如,“find_or_initialize_by_topic_id_and_publish_date_and_publist_id”真的搞砸了我的格式。我知道使用普通的find方法我可以提供所有这些东西作为参数。这个方法有更可读的版本吗?
答案 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
我没有运行这个,但它应该足以让你知道。