Я хотел бы получить совет относительно того, как лучше всего реорганизовать этот контроллер. Контроллер создает страницу зон и модулей. Страница has_many зон, зона has_many модулей. Таким образом, зоны представляют собой всего лишь кластер модулей, завернутых в контейнер.Каков наилучший способ реорганизации этого контроллера Rails?
Проблема, с которой я сталкиваюсь, заключается в том, что некоторые модули могут иметь некоторые конкретные запросы, которые я не хочу выполнять на каждой странице, поэтому мне пришлось добавлять условия. Условия просто проверяются, если модуль находится на странице, если выполняется запрос. Одна из проблем с этим заключается в том, что если я добавлю сотни специальных запросов модуля, контроллер должен перебирать каждый из них.
Я думаю, что я хотел бы, чтобы это условие модуля вышло из контроллера, а также все дополнительные пользовательские действия. Я могу держать все в этом одном контроллере, но я планирую иметь много приложений, использующих этот контроллер, чтобы он мог запутаться.
class PagesController < ApplicationController
# GET /pages/1
# GET /pages/1.xml
# Show is the main page rendering action, page routes are aliased in routes.rb
def show
#-+-+-+-+-Core Page Queries-+-+-+-+-
@page = Page.find(params[:id])
@zones = @page.zones.find(:all, :order => 'zones.list_order ASC')
@mods = @page.mods.find(:all)
@columns = Page.columns
# restful params to influence page rendering, see routes.rb
@fragment = params[:fragment] # render single module
@cluster = params[:cluster] # render single zone
@head = params[:head] # render html, body and head
#-+-+-+-+-Page Level Json Conversions-+-+-+-+-
@metas = @page.metas ? ActiveSupport::JSON.decode(@page.metas) : nil
@javascripts = @page.javascripts ? ActiveSupport::JSON.decode(@page.javascripts) : nil
#-+-+-+-+-Module Specific Queries-+-+-+-+-
# would like to refactor this process
@mods.each do |mod|
# Reps Module Custom Queries
if mod.name == "reps"
@reps = User.find(:all, :joins => :roles, :conditions => { :roles => { :name => 'rep' } })
end
# Listing-poc Module Custom Queries
if mod.name == "listing-poc"
limit = params[:limit].to_i < 1 ? 10 : params[:limit]
PropertyEntry.update_from_listing(mod.service_url)
@properties = PropertyEntry.all(:limit => limit, :order => "city desc")
end
# Talents-index Module Custom Queries
if mod.name == "talents-index"
@talent = params[:type]
@reps = User.find(:all, :joins => :talents, :conditions => { :talents => { :name => @talent } })
end
end
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @page.to_xml(:include => { :zones => { :include => :mods } }) }
format.json { render :json => @page.to_json }
format.css # show.css.erb, CSS dependency manager template
end
end
# for property listing ajax request
def update_properties
limit = params[:limit].to_i < 1 ? 10 : params[:limit]
offset = params[:offset]
@properties = PropertyEntry.all(:limit => limit, :offset => offset, :order => "city desc")
#render :nothing => true
end
end
Итак, представьте себе сайт с сотней модулей и множеством дополнительных действий контроллера. Я думаю, большинство из них согласилось бы, что было бы намного чище, если бы я мог переместить этот код и реорганизовать его, чтобы он больше походил на конфигурацию.
Я не думаю, что это будет хорошо работать для этого контроллера, но я планирую использовать его на своих контроллерах администратора, которые ничего, кроме сухих. Спасибо за совет! –