2012-02-22 2 views
0

Im используя следующий код в метод, называемый a_level:проблема с хэш в рельсах

if(@program.theme==MyHelper::TemplateConstants::DEFAULT_LAYOUT) 
    style = 'border: none' 
elsif(@program.theme == MyHelper::TemplateConstants::LOGO_LAYOUT) 
    style = 'border: top' 
end 

И следующие внутри метода называется b_level:

if(@program.theme==MyHelper::TemplateConstants::DEFAULT_LAYOUT) 
    style = 'color: #888;' 
elsif(@program.theme == MyHelper::TemplateConstants::LOGO_LAYOUT) 
    style = 'color: #666;' 

в том же помощника. Вместо этого я хочу использовать хеш, что-то вроде

my_styles = { :level_a => {... }, :level_b => {...} } 

Im не понимает это правильно. Любая помощь приветствуется!

+0

Когда вы говорите не получить это право, что вы имеете в виду? Вы пробовали 'style_hash = Hash [: program_logo => blah,: do_not_reply => foo]'? – ScottJShea

+0

В принципе, синтаксис. – Appster

+0

Только что обновил мой комментарий, когда вы оставляли свои – ScottJShea

ответ

2

Я думаю, что вы ищете это:

style_hash = { 
    :program_logo => { 
     UserMailerHelper::EmailTemplateConstants::DEFAULT_WITH_BANNER => 'border: none;height:50px;float:left; margin-right: 10px; padding: 2px;', 
     UserMailerHelper::EmailTemplateConstants::LOGO_AT_BOTTOM => 'border: none;height:80px; padding: 2px 0px 2px 2px;' 
    }, 
    :do_not_reply => { 
     UserMailerHelper::EmailTemplateConstants::DEFAULT_WITH_BANNER => 'color: #888; padding-top: 5px; display:block; text-align:center', 
     UserMailerHelper::EmailTemplateConstants::LOGO_AT_BOTTOM => 'color: #888; padding-top: 5px; border-top: 1px solid #D7D4C6;' 
    } 
} 

, а затем в program_logo:

style = style_hash[:program_logo][@program.email_theme] 

и do_not_reply:

style = style_hash[:do_not_reply][@program.email_theme] 

Или, возможно, было бы больше смысла договориться с style_hash следующим образом:

style_hash = { 
    UserMailerHelper::EmailTemplateConstants::DEFAULT_WITH_BANNER => { 
     :program_logo => 'border: none;height:50px;float:left; margin-right: 10px; padding: 2px;', 
     :do_not_reply => 'color: #888; padding-top: 5px; display:block; text-align:center' 
    }, 
    UserMailerHelper::EmailTemplateConstants::LOGO_AT_BOTTOM => { 
     :program_logo => 'border: none;height:80px; padding: 2px 0px 2px 2px;', 
     :do_not_reply => 'color: #888; padding-top: 5px; border-top: 1px solid #D7D4C6;' 
    } 
} 

А затем получить доступ к нему, как это:

# program_logo 
style = style_hash[@program.email_theme][:program_logo] 
# do_not_reply 
style = style_hash[@program.email_theme][:do_not_reply] 
+0

Черт му ... вы слишком хороши ... – ScottJShea

+0

Отлично, спасибо! Мне понравился второй подход, мне было бы легче добавить еще шаблоны писем позже. – Appster

+0

@Appster: Я предпочитаю второй вариант, он позволяет вам вытащить целую тему в виде единого хэша; первый чувствует себя немного назад. –

Смежные вопросы