В Ruby on Rails мы должны использовать content_for? (: Foobar)? - PullRequest
0 голосов
/ 19 апреля 2011

Это для Rails 3, почти всегда я думаю, что за content_for?(:foo) следует content_for(:foo) (в хамле):

%title= content_for?(:title_for_page) ? "#{content_for(:title_for_page)} - Our great website" : 'Our great website'

Таким образом, вместо того, чтобы делать 2 поиска, не лучше ли просто сделать 1 поиск и использовать более длинный код:

- title_for_page = content_for(:title_for_page)    # is "" when not previously set
%title= title_for_page.blank? ? 'Our great website' : "#{title_for_page} - Our great website"

? Но если content_for? реализован как хеш, то, может быть, он все равно очень быстрый, сравнимый с blank??

Ответы [ 2 ]

3 голосов
/ 19 апреля 2011

Однострочник для решения проблемы:

- title_for_page = (c = content_for(:title_for_page)).blank? ? 'Our great website' : "#{c} - Our great website"
2 голосов
/ 19 апреля 2011

Единственный способ узнать это проверить:)

ruby-1.9.2-p136 :001 > h = {:mike => "test"}
 => {:mike=>"test"} 

ruby-1.9.2-p136 :004 > Benchmark.ms do
ruby-1.9.2-p136 :005 >     h[:mike].present?
ruby-1.9.2-p136 :006?>   end
 => 0.029087066650390625 
ruby-1.9.2-p136 :007 > Benchmark.ms do
ruby-1.9.2-p136 :008 >     h[:mike].blank?
ruby-1.9.2-p136 :009?>   end
 => 0.011205673217773438 

Я использую present?, в соответствии с источником content_for?

Интересночто blank? быстрее present?, не так ли?Время исследовать.

Давайте посмотрим на исходный код present?:

Вау, получается present? просто вызывает blank? и отрицает его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...