재사용 할 일반적인 메소드를 작성하여 레일스 코드를 정리하고 싶습니다. 그렇게하기 위해서는 코드 변수에 사용되는 필드/속성과 클래스 이름을 만들어야하므로 동일한 코드로 세 모델 (및 해당 필드)에서 작동 할 수 있습니다. 나는이 question과 this one에서 배우려고했지만, 제대로 작동하지 못했습니다. 내 모델에서레일에서 변수 이름을 속성으로 사용하기
, 나는이있다 :이 코드
def self.update_percentages
update_percentages_2(User, "rank", "top_percent")
end
def self.update_percentages_2(klass, rank_field, percent_field)
rank_class = (klass.name).constantize
total_ranks = rank_class.maximum(rank_field)
top_5 = (total_ranks * 0.05).ceil
rank_class.find_each do |f|
if f.send("#{rank_field}") <= top_5
f.send("#{percent_field}", 5)
f.save
end
end
end
을, 나는 ArgumentError: wrong number of arguments (1 for 0)
를 얻을. 문제의 범위를 좁히기 위해 라인을 주석 처리하기 시작하면 f.send("#{percent_field}", 5)
이 오류를 일으키는 것으로 보입니다.
내가 추가 한 경우 : percent_field = (percent_field).constantize
내가 얻을 : Name Error: wrong constant name top_percent
.
누군가 내가 잘못하고있는 것을 결정할 수 있도록 도와 줄 수 있습니까? 당신이 속성에 할당 할 경우