我有一個對所有控制器都通用的基本URL。我想在一個地方聲明這個變量,並將其用於所有控制器中。這將使任何未來的更新快速簡單。那可能嗎?我在我的所有控制器中聲明如下:爲Rails中的所有控制器創建一個全局變量
@baseURL = "www.url.com/something/"
我有一個對所有控制器都通用的基本URL。我想在一個地方聲明這個變量,並將其用於所有控制器中。這將使任何未來的更新快速簡單。那可能嗎?我在我的所有控制器中聲明如下:爲Rails中的所有控制器創建一個全局變量
@baseURL = "www.url.com/something/"
利用ruby的繼承鏈。您可以定義一些父類所有的控制器爲一個常數,通常ApplicationController
的:
class ApplicationController < ActionController::Base
BASE_URL = "www.url.com/something/"
end
然後,它會成爲提供給所有兒童是,即PostsController < ApplicationController
。
在您的應用程序控制器中。
before_action :set_variables
def set_variables
@baseURL = "www.url.com/something/"
end
,你讓所有的控制器繼承的ApplicationController這@baseURL
實例變量將在所有的動作和視圖訪問。
Rails控制器繼承自ApplicationController。嘗試把它那裏:
def baseUrl
@baseURL = "www.url.com/something/"
end
你可以在你的應用程序控制器定義一個類變量:
class ApplicationController < ActionController::Base
@@baseURL = "www.url.com/something/"
def self.baseURL
@@baseURL
end
end
class SomeFrontendController < ApplicationController
end
在所有的控制器,現在你可以訪問@@或基本URL調用類方法:
SomeFrontendController.baseURL
# => "www.url.com/something/"
但是這很髒。 更好使用常量:
class ApplicationController < ActionController::Base
BASE_URL = "www.url.com/something/"
end
class SomeFrontendController < ApplicationController
end
在所有的控制器,現在你可以訪問BASE_URL或者:如果是隻有一個變量
SomeFrontendController::BASE_URL
,你肯定,你需要它只是在控制器範圍內聲明一個常量在ApplicationController
應該足夠了:
class ApplicationController < ActionController::Base
BASE_URL = "www.url.com/something/"
end
class SomeOtherController < ApplicationController
def index
@base_url = BASE_URL
end
end
個
提前或推後,需要在應用程序中,因此它是非常有用的其他部位但是通常定義網址(和其他東西如電子郵件地址)使用的寶石一樣https://github.com/settingslogic/settingslogic有真理的唯一來源,並存儲在一個地方所有這些變量(文件)。
您可以在ApplicationController
中定義一個方法,並使用像helper_method這樣的方法從視圖中訪問它。
class ApplicationController < ActionController::Base
helper_method :base_url
def base_url
@base_url ||= "www.url.com/something/"
end
end
我嘗試避免before_actions設置變量。 你的控制器和視圖裏面你將能夠調用base_url
方法。
這是相同的,包括在application_helper.rb
此方法。
爲什麼不使用'root_url'和相關的('link_to'和'url_for')? – depquid