2016-03-10 23 views
0

大家好我使用軌道2.在控制器上允許多種方法而不添加路由的最佳方式是什麼?

老派我其實我使用的軌道4,我試圖找到一種方法,在控制器上創建方法,而沒有書面方式

在軌道2使用:(只需要寫控制器上的名稱)

#controller 
def report_a 
end 

def report_b 
end 

def report_c 
end 

...and whatever def 

#ROUTES 
map.connect ':controller/:action/:id' 
map.connect ':controller/:action/:id.:format' 

在軌道4

#controller 
def report_a 
end 

def report_b 
end 

def report_c 
end 

#ROUTES 
match ':controller(/:action(/:id(.:format)))', :via => [:get, :post] 

問題是,當我創建這樣一個觀點報告:(視圖/報告/ report_a.html.erb)

<%= form_tag :action=>"report_a" do %> 
<% end %> 

我得到這個消息:

No route matches [GET] "/reports/report_a" 

要解決此問題,做的Rails instruccions是這樣的:

#controller 
def report_a 
    @users= User.search(params[:name]) 
end 

def result_report_a 
    @users= User.search(params[:name]) 
end 

#view/reports/report_a.html.erb 
<%= form_tag :action=>"result_report_a" do %> 
<% end %> 

#routes.rb 
get "reports#report_a" 
post "reports#result_report_a" 
get "reports#report_b" 
post "reports#result_report_b" 
get "reports#report_c" 
post "reports#result_report_c" 

而且我發現這更好的辦法:

#controller reports.rb 
def search_report_a 
    report_a 
    render :report_a 
end 

def report_a 
    @users = User.where(:name=>params[:name]) 
end 

def search_report_b 
    report_b 
    render :report_b 
end 

def report_b 
@users = User.where(:address=>params[:address]) 
end 
... 

#Routes.rb 
resources :users do 
    match 'search_report_a', :via => [:post,:get], :on => :collection 
    match 'search_report_b', :via => [:post,:get], :on => :collection 
    ... 
end 

有沒有其他的方式來創建方法而不需要在ROUTES.RB中添加所有的方法?

任何建議或唯一的方法是添加獲取和發佈?

想象一下你有幾種方法的情況。

+0

報告沒有顯示頁面?如果您要獲得大量報告,則只需使用報告的ID即可。 – toddmetheny

+0

我在控制器中使用def來進行搜索和導出信息。 –

+0

例如def report_client end,view report_client.html.erb和def report_clien裏面使用的format.html,format.pdf和format.xls –

回答

0

Rails中的最佳方法是使用REST架構。您的控制器應該能夠查看,創建,更新和銷燬某些資源(當然,所有操作都不是強制性的)。

例如:

def ReportsController 
    def index 
    # Actions to show links to all possible reports 
    end 

    def show 
    # Show report based on params 
    end 
end 

#show方法可以僅通過從GET請求檢查PARAM顯示任何報告(report_a,report_b等)。

而且您不需要在#show方法內製作所有邏輯。將報告相關的邏輯放在一些服務對象中可能會更好。

相關問題