Я хочу иметь какой-то один список, который инициализируется в отдельном модуле, затем может быть включен в контроллер и изменен на уровне класса контроллера, а также доступен на уровне экземпляра контроллера.Я думал, что здесь будут работать переменные класса, но происходит что-то странное, кажется, что они не инициализируются в моем конечном классе.
Более конкретно:
У меня много контроллеров, включая некоторыефункциональность по умолчанию, например, в модуле.
class BlahController < ApplicationController
include DefaultFunctionality
end
class FooController < ApplicationController
include DefaultFunctionality
end
module DefaultFunctionality
def show
render 'shared/show'
end
def model
controller_name
end
end
.Это не реальный код, но это наибольшее взаимодействие, которое у него есть на данный момент.
Я бы хотел расширить это с помощью некоторой другой функциональности (сортируемый интерфейс для списков), например, так [примечание I 'я хотел бы иметь возможность обменивать функциональность списка порядка сортировки по классам на основе классов]:
module DefaultFunctionality
module Sortable
def sort_params
params.slice(:order, :sort_direction).reverse_merge(default_sort_params)
end
def default_sort_params
@@sorts.first
end
def set_sorts(sorts = []) #sorts = [{:order => "most_recent", :sort_direction => :desc},...]
@@sorts = sorts
end
end
include Sortable
set_sorts([{:order => :alphabetical, :sort_direction => :asc}] #never run?
end
Идея состоит в том, чтобы убедиться, что я могу поменять множество всехвозможные сортировки по классам, например, так:
class FooController < ApplicationController
include DefaultFunctionality #calls the default set_sorts
set_sorts([{:order => :most_recent, :sort_direction => :asc}])
end
А также для создания хороших ссылок в представлениях, как показано ниже, за исключением того, что я получаю сообщение об ошибке.
___/blah/1 => shared/show.html.erb__
<%= link_to("upside down", polymorphic_path(model, sort_params) %><%#BOOOM uninitialized class variable @@sorts for BlahController %>
Я считаю, что class_var - плохой вызов, но я не могу думать о том, что еще я мог бы использовать.(экземпляр класса var?)