<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=353004&amp;view=findpost&amp;p=3121669</guid>
        <pubDate>Thu, 19 Apr 2012 08:10:23 +0000</pubDate>
        <title>избавится от множественных проверок</title>
        <link>https://forum.sources.ru/index.php?showtopic=353004&amp;view=findpost&amp;p=3121669</link>
        <description><![CDATA[Romtek: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=353004&view=findpost&p=3094990'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Cepheus &#064; <time class="tag-quote__quoted-time" datetime="2012-03-13T09:23:56+04:00">13.03.12, 05:23</time></span><div class='quote '><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">def list</div><div class="code_line">if params[:category]==nil</div><div class="code_line">@top_cat= Category.find_all_by_parent_id(nil)</div><div class="code_line">end</div><div class="code_line">if params[:category]!=nil</div><div class="code_line">@cat = Category.find_all_by_parent_id(params[:category])</div><div class="code_line">@pages = Pages.find_all_by_category_id(params[:category])</div><div class="code_line">end</div><div class="code_line">end</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script></div></div><br>
Первое, что бросается в глаза, так это излишняя проверка очевидного условия:<br>
Если params[:category] сравнивается с null, то второй раз делать это бессмысленно, так как есть оператор <strong class='tag-b'>else</strong>, который выберет оставшиеся варианты.<br>
<br>
Исходя из описания задачи я понял, что отображаем страницы только для подкатегории, не включая вложенных подкатегорий. Поэтому <em class='tag-i'>nested sets</em> отпадают.<br>
<ol class="tag-list" type="1"><li>Опустив лишнее условие:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">def list</div><div class="code_line">&nbsp;&nbsp;if params[:category] == nil</div><div class="code_line">&nbsp;&nbsp; &nbsp;@top_cat= Category.find_all_by_parent_id(nil)</div><div class="code_line">&nbsp;&nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp;@cat = Category.find_all_by_parent_id(params[:category])</div><div class="code_line">&nbsp;&nbsp; &nbsp;@pages = Pages.find_all_by_category_id(params[:category])</div><div class="code_line">&nbsp;&nbsp;end</div><div class="code_line">end</div></ol></div></div></div></div></li><li>Выражение<br>
<strong class='tag-b'>@pages = Pages.find_all_by_category_id(params[:category])</strong><br>
стоит переписать согласно<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'><a class='tag&#045;url' href='http://www.nascenia.com/10&#045;tips&#045;to&#045;boost&#045;up&#045;performance&#045;of&#045;your&#045;ruby&#045;on&#045;rails&#045;application/' target='_blank'>http://www.nascenia.com/10&#045;tips&#045;to&#045;boost&#045;u...ls&#045;application/</a></span><div class='quote '>6. Avoid dynamism<br>
<br>
Although find_by and <strong class='tag-b'>find_all_by</strong> dynamic methods are really cool, the are also kind of <strong class='tag-b'>slow because each one needs to run through method_missing and parse the filename against the list of columns in database table</strong>.</div></div>так:<br>
<strong class='tag-b'>Pages.all(:conditions =&gt; { :category_id =&gt; params[:category] })</strong><br>
<br>
DRY №1<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">def list</div><div class="code_line">&nbsp;&nbsp;@cat = Category.all(:conditions =&#62; { :parent_id =&#62; params[:category] }) # выступает в роли подкатегорий данной категории или топ-категорий</div><div class="code_line">&nbsp;&nbsp;if params[:category]</div><div class="code_line">&nbsp;&nbsp; &nbsp;@pages = Pages.all(:conditions =&#62; { :category_id =&#62; params[:category] }) # страницы в данной подкатегории</div><div class="code_line">&nbsp;&nbsp;end</div><div class="code_line">end</div></ol></div></div></div></div></li><li>DRY №2<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">def list</div><div class="code_line">&nbsp;&nbsp;@cat = Category.all(:conditions =&#62; { :parent_id =&#62; params[:category] }) # выступает в роли подкатегорий данной категории или топ-категорий</div><div class="code_line">&nbsp;&nbsp;if params[:category] &amp;&amp; Pages.count(:conditions =&#62; { :category_id =&#62; params[:category] }) &#62; 0 # проверяем наличие параметра категории и количество страниц в ней</div><div class="code_line">&nbsp;&nbsp; &nbsp;@pages = Pages.all(:conditions =&#62; { :category_id =&#62; params[:category] }) # страницы в данной подкатегории</div><div class="code_line">&nbsp;&nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp;@pages = []</div><div class="code_line">&nbsp;&nbsp;end</div><div class="code_line">end</div></ol></div></div></div></div></li></ol>Я не знаю каким именно образом отображаются элементы на экране, поэтому возможны дополнительные изменения.<br>
Может даже и как такие:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp;@cat = Category.all(:conditions =&#62; { :parent_id =&#62; params[:category] }) # выступает в роли подкатегорий данной категории или топ-категорий</div><div class="code_line">&nbsp;&nbsp;if params[:category] # проверяем наличие параметра (под)категории</div><div class="code_line">&nbsp;&nbsp; &nbsp;@current_cat = Category.find(params[:category]) # находим заданную (под)категорию</div><div class="code_line">&nbsp;&nbsp; &nbsp;if @current_cat.pages.count &#62; 0 # имеются ли в ней страницы</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;@pages = @current_cat.pages.all # страницы в данной подкатегории</div><div class="code_line">&nbsp;&nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;@current_cat = nil</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;@pages = []</div><div class="code_line">&nbsp;&nbsp; &nbsp;end</div><div class="code_line">&nbsp;&nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp;@pages = []</div><div class="code_line">&nbsp;&nbsp;end</div></ol></div></div></div></div>]]></description>
        <author>Romtek</author>
        <category>Ruby</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=353004&amp;view=findpost&amp;p=3118985</guid>
        <pubDate>Mon, 16 Apr 2012 04:55:10 +0000</pubDate>
        <title>избавится от множественных проверок</title>
        <link>https://forum.sources.ru/index.php?showtopic=353004&amp;view=findpost&amp;p=3118985</link>
        <description><![CDATA[Cepheus: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=353004&view=findpost&p=3118291'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>LeXuS &#064; <time class="tag-quote__quoted-time" datetime="2012-04-14T08:51:19+00:00">14.04.12, 08:51</time></span><div class='quote '>Ага=) Именно связи Почитай как реализовать вывод если связать так  <br>
</div></div><br>
да тут в другом вопрос(хотя про связи не отрицаю, может и имеют место быть тут, хотя и так все связанно), тут такое дело есть категории есть страницы, категории имеют вложенные категории, как обычно id через params приходит, категории имеют страницы, но могу и не иметь.<br>
вот и получается такой алгоритм <br>
1. если params =nil то вывести категории верхнего уровня, и посмотреть имеет ли он страницы если да то вывести эти страницы<br>
2. если params&#33;=nil то вывести категории с parent_id=params[:id] и так-же вывести страницы если имеются<br>
<br>
вот и получается что и в контроллере и во вьюхе есть по пару проверок, хоть это и не много но как-то взгляр режет=)]]></description>
        <author>Cepheus</author>
        <category>Ruby</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=353004&amp;view=findpost&amp;p=3118291</guid>
        <pubDate>Sat, 14 Apr 2012 08:51:19 +0000</pubDate>
        <title>избавится от множественных проверок</title>
        <link>https://forum.sources.ru/index.php?showtopic=353004&amp;view=findpost&amp;p=3118291</link>
        <description><![CDATA[LeXuS: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=353004&view=findpost&p=3117727'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Cepheus &#064; <time class="tag-quote__quoted-time" datetime="2012-04-13T09:33:15+00:00">13.04.12, 09:33</time></span><div class='quote '><strong class='tag-b'>LeXuS</strong>  и причем тут has_many, belongs_to, это связи, а мне нужно выводить полученный результат</div></div><br>
Ага=) Именно связи:) Почитай как реализовать вывод если связать так  ;)]]></description>
        <author>LeXuS</author>
        <category>Ruby</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=353004&amp;view=findpost&amp;p=3117727</guid>
        <pubDate>Fri, 13 Apr 2012 09:33:15 +0000</pubDate>
        <title>избавится от множественных проверок</title>
        <link>https://forum.sources.ru/index.php?showtopic=353004&amp;view=findpost&amp;p=3117727</link>
        <description><![CDATA[Cepheus: <strong class='tag-b'>LeXuS</strong>  и причем тут has_many, belongs_to, это связи, а мне нужно выводить полученный результат]]></description>
        <author>Cepheus</author>
        <category>Ruby</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=353004&amp;view=findpost&amp;p=3110691</guid>
        <pubDate>Tue, 03 Apr 2012 17:44:30 +0000</pubDate>
        <title>избавится от множественных проверок</title>
        <link>https://forum.sources.ru/index.php?showtopic=353004&amp;view=findpost&amp;p=3110691</link>
        <description><![CDATA[LeXuS: <strong class='tag-b'>deil</strong>,<br>
Ней смей так делать никогда:) Да и не в тему)<br>
<br>
Подскажу по теме:<br>
Используй гем <a class='tag-url' href='https://github.com/collectiveidea/awesome_nested_set' target='_blank'>https://github.com/collectiveidea/awesome_nested_set</a>]]></description>
        <author>LeXuS</author>
        <category>Ruby</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=353004&amp;view=findpost&amp;p=3110479</guid>
        <pubDate>Tue, 03 Apr 2012 13:30:20 +0000</pubDate>
        <title>избавится от множественных проверок</title>
        <link>https://forum.sources.ru/index.php?showtopic=353004&amp;view=findpost&amp;p=3110479</link>
        <description><![CDATA[deil: <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">def list</div><div class="code_line">&nbsp;&nbsp;@categories = Category.all :conditions =&#62; {:category_id =&#62; params[:category_id] }</div><div class="code_line">&nbsp;&nbsp;@pages = Page.all :conditions =&#62; {:category_id =&#62; params[:category_id] }</div><div class="code_line">end</div></ol></div></div></div></div><br>
<br>
Не?]]></description>
        <author>deil</author>
        <category>Ruby</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=353004&amp;view=findpost&amp;p=3105434</guid>
        <pubDate>Wed, 28 Mar 2012 06:37:29 +0000</pubDate>
        <title>избавится от множественных проверок</title>
        <link>https://forum.sources.ru/index.php?showtopic=353004&amp;view=findpost&amp;p=3105434</link>
        <description><![CDATA[Мохнатый: И что я сюда зашел :)]]></description>
        <author>Мохнатый</author>
        <category>Ruby</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=353004&amp;view=findpost&amp;p=3102867</guid>
        <pubDate>Sat, 24 Mar 2012 21:50:11 +0000</pubDate>
        <title>избавится от множественных проверок</title>
        <link>https://forum.sources.ru/index.php?showtopic=353004&amp;view=findpost&amp;p=3102867</link>
        <description><![CDATA[LeXuS: Какой ужас%)<br>Почитай доку по поводу того что такое has_many, belongs_to и т.д.]]></description>
        <author>LeXuS</author>
        <category>Ruby</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=353004&amp;view=findpost&amp;p=3094990</guid>
        <pubDate>Tue, 13 Mar 2012 05:23:56 +0000</pubDate>
        <title>избавится от множественных проверок</title>
        <link>https://forum.sources.ru/index.php?showtopic=353004&amp;view=findpost&amp;p=3094990</link>
        <description><![CDATA[Cepheus: Здравствуйте,<br>
есть 2 таблицы <br>
category(id,titel,parent_id)<br>
pages(id,titel,category_id)<br>
<br>
нужно вывести на странице категории верхнего уровня(parent_id=nil), затем по переходу категории выводить под категории и страницы принадлежащие ей, в контроллере в методе list<br>
делаю<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">def list</div><div class="code_line">if params[:category]==nil</div><div class="code_line">@top_cat= Category.find_all_by_parent_id(nil)</div><div class="code_line">end</div><div class="code_line">if params[:category]!=nil</div><div class="code_line">@cat = Category.find_all_by_parent_id(params[:category])</div><div class="code_line">@pages = Pages.find_all_by_category_id(params[:category])</div><div class="code_line">end</div><div class="code_line">end</div></ol></div></div></div></div><br>
<br>
соответственно во вьюхе нужно все это дело вывести<br>
приходится тоже делать всякие проверки, так как еще категории и страницы выводятся в разные таблицы, и если к примеру страниц не существует у категории, то и таблицу не выводить, уж оч много проверок всяких<br>
как тут можно это все оптимизировать. Ух как описал=))))]]></description>
        <author>Cepheus</author>
        <category>Ruby</category>
      </item>
	
      </channel>
      </rss>
	