0
다음 도우미 메서드를 만들고 잘 작동하지만 호출되는 방식을 개선하고 싶습니다. 이 코드를 어떻게 리팩토링 할 수 있습니까?
def display_if_present(attribute, i18key, hours=nil)
unless attribute.blank?
content_tag :li do
if hours.present?
concat content_tag :h2, get_translation_by_model_attr('achievment', i18key) + ' ('+t(:hours)+'): '
else
concat content_tag :h2, get_translation_by_model_attr('achievment', i18key)+': '
end
if i18key.include? 'date'
concat content_tag :p, attribute.strftime('%m/%Y')
elsif hours.present?
concat content_tag :p, h(attribute) + "(" + t(:hours) + ")"
else
concat content_tag :p, h(attribute)
end
end
end
end
그리고 view
측에 나는 다음과 같은 한
<%= display_if_present(academic_achievment.institution,'institution') %>
<%= display_if_present(academic_achievment.ativs_description,'ativs_description') %>
<%= display_if_present(academic_achievment.date_start,'date_start') %>
<%= display_if_present(academic_achievment.date_finished,'date_finished') %>
<%= display_if_present(academic_achievment.load, 'load', :hours) %>
<%= display_if_present(academic_achievment.tags, 'tags') %>
. 그래서 시도 : 나는 코드의 더 나은 부분에 대한 몇 가지 도움을 주셔서 감사합니다
wrong constant name academic_achievment.institution
Extracted source (around line #15):
12:
13: <% elements.collect! do |item| %>
14: <% params = (item == "load") ? "item, :hours" : "item" %>
15: <%= display_if_present("academic_achievment.#{item}".constantize, params.constantize) %>
16: <% end %>
17:
18: </ul>
:
<% elements = %w(institution ativs_description date_start date_finished load tags) %>
<% elements.collect! do |item| %>
<% params = (item == "load") ? "item, :hours" : "item" %>
<%= display_if_present("academic_achievment.#{item}".constantize, params.constantize) %>
<% end %>
위의 코드 블록은 오류를 반환했습니다.
당신을 감사합니다! 그게 효과가있어! :) –
당신을 환영합니다 :-) – Mischa