[英]What is the best way to refactor validation logic and regular expressions in rails?
[英]What's the best way to refactor this Rails controller?
我想要一些有關如何最佳重構此控制器的建議。 控制器將建立一個區域和模塊頁面。 頁面has_many區域,區域has_many模塊。 因此,區域僅僅是包裝在容器中的一組模塊。
我遇到的問題是某些模塊可能有一些我不想在每個頁面上執行的特定查詢,因此我不得不添加條件。 條件只是測試模塊是否在頁面上(如果執行了查詢)。 問題之一是,如果我添加一百個特殊的模塊查詢,則控制器必須遍歷每個查詢。
我想我希望看到這些模塊狀態移出控制器以及所有其他自定義動作。 我可以將所有內容都保留在一個控制器中,但我計划使用該控制器來使用許多應用程序,以免混亂。
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
因此,假設一個站點有一百個模塊,並包含數十個其他控制器操作。 我認為大多數人都同意,如果我可以移出該代碼並將其重構為更像配置的行為,它將更加干凈。
我會將您特定於代碼段的查詢移到幫助程序方法中,並將其移出控制器,以便代碼段本身可以通過erb執行查詢,並通過幫助程序保持DRY和可讀性。 因此,您可以在模塊中引用find_all_refs或類似的東西,而不是在模塊中引用@refs,而是執行並可能記住響應。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.