2016-03-15 167 views
0

據我所知,路由會帶你從一個起點到一個控制器,一個動作。該行動帶來了相關的觀點;那麼如果我不需要我的控制器的任何視圖,並且只想調用控制器的底層方法,而不呈現視圖或路由。Ruby on Rails路由到控制器

可以說我有一個FoodsController有幾種方法,並且在該控制器中存在方法cake,pizza和chips。每個人都會向數據庫查詢祕密消息並將其存儲在一個變量中,但是對此的請求將來自我們應用程序的其他部分。

爲了實現這個目標,我應該使用這種路徑或某種點語法,如food.cake()

所以我想我想說的是,嘿「服務器」去做這件事,回到你一旦完成就離開的地方。

+0

檢查此,http://stackoverflow.com/questions/14806310/forcing-http-response-to-return-status-200-in-rails – anoop

回答

0

控制器僅用於URL端點。例如,如果您點擊http://my.app/my_route,則需要將my_route零件映射到您的routes.rb文件中的控制器操作。但是如果你在瀏覽器中輸入這個信息會發生什麼?你會想看到正確的東西?所以你需要返回一些數據(json,html,erc)。您可以使用render

這與編寫'普通'Ruby代碼(即Web框架外部的Ruby)不同。你知道一堂課是什麼樣的,以及以下幾點是如何運作的?

class MyClass 
    def initialize 
    end 
    def my_method 
    puts "my_method_called" 
    end 
end 

MyClass.new.my_method # => "my_method_called" 

這是非常基本的Ruby,也適用於Rails,雖然有一些規則需要編寫代碼。

順便說一句,如果你真的想呈現什麼控制器操作,只需使用:

render text: "", status: 204 
return false 

狀態:204的意思是「沒有內容」。

+0

所以像PostController.new.create ...調用類的東西。那麼對於一個新的類實例來說,最後是類中的方法? – failpractice

+0

答案是否定的,但這是一個很好的問題。控制器是一種特殊情況,因爲你從不直接實例化它們,當你輸入一個url時,發生在幕後的所有事情。如果你只是想創建一個輔助方法,你可以在任何地方使用,你可以在你的一個模型上創建一個類方法,或者在'config/initializers /'文件夾中寫一個新的類/模塊。 –

+0

然後,如果我可以在config/initializers或模型中創建一個類,那麼他們可以從其他地方訪問,爲什麼我們甚至有控制器。爲什麼不只是讓一個助手完成所有基本的CRUD方法,並且在你想在類中執行其中一種方法時繼續將它傳遞給模型 – failpractice

0

你可以使用渲染JSON或文本,如果該方法不呈現任何東西,我認爲它應該是私人的。

+0

好吧,所以我想調用一個方法,沒有一個查看它應該在私人部分? – failpractice

+0

如果該方法未呈現值或視圖,請將其設置爲私有,因爲它僅用於控制器而不用於公共。 – Yaser

+0

如果您不想更改視圖或操作,可以創建一個ajax並返回json。 – Yaser

0

在您的例子,你可以用蛋糕方法在另一個控制器像這樣:

cake = Food.cake 

請注意,這種方法應該生活在食物模式,而不是控制,因爲你並不需要一個視圖。

+0

食品部分調用模型還是控制器?我的印象是,你需要稱控制器複數和模型單數。 – failpractice