2013-11-22 40 views
6

我爲特定動作定義了路由並創建了一個鏈接。我也創建了相應的視圖,但沒有定義控制器操作方法的代碼。點擊鏈接仍然會呈現視圖。這是視圖被渲染而沒有實際存在的行爲。rails 3渲染視圖不採取行動

任何解釋?

回答

5

是的,即使沒有相應的動作存在,視圖也會被渲染,因爲路由的定義是相同的。但這不是一個好習慣!

+1

然後當未定義的動作錯誤觸發?只有當相應的視圖不存在時? – AshwinKumarS

+3

@RSB,這在試圖呈現靜態頁面時很有用 – Virtual

+2

未定義的動作錯誤在頁面不是靜態時發生,我同意@Virtual – RSB

1

Rails並不期望您爲您的config/routes.rb文件中的每條路徑定義控制器操作。正如你可能知道,你可以定義一個動作,也保留它爲空,如下所示:

class PostsController < ApplicationController 

    def index 
    end 

end 

對於任何Web應用程序將是不尋常的它保持這樣的實例變量,數據庫事務和類似意志碼最終會填充大部分控制器操作。對於純靜態頁面,該操作仍應定義,但應爲空。

0

一個非常詳盡的解釋,即使你定義爲行動過濾器,它也將執行,不論是否已定義的動作或不和格倫通過他的鏈接中提到的導軌自動呈現與命名爲控制器(存在於視圖文件夾內)的文件夾內的操作同名的視圖。

空行動等同於沒有行動,但規定是爲了某些原因(如可理解性和可維護性)定義行動。

參考:這裏在這個link

要注意,從例如空上述方法會工作得很好 因爲Rails會默認渲染new.html.erb視圖,除非 操作,否則說

因此,如果您必須更改默認響應,則會定義顯式HTTP響應。