У меня есть только смутное представление об этом, поэтому при необходимости задайте вопрос:
У меня есть набор значений, которые я регулярно передаю в своем контроллере rails виджету, который немного отличается от страницы к странице, от того, что я передаю ему. Это начинает становиться громоздким для каждого контроллера, поэтому я добавил небольшой класс, чтобы немного объединить этот процесс (базовая начальная суть ниже).
#return dashcontroller hash from more succinct cues
module DashControl
class DashControl
attr_accessor :title, :instance, :actions
def initialize(title='default title', instance='default instance', actions={})
@title = title
@instance = instance
initialize_actions(actions)
end
def initialize_actions(actions)
actions.kind_of?(Hash) ? @actions = actions : initialize_tag(actions)
end
def initialize_tag(tag)
case tag
when :manage_default
@actions = {:statusactions => [],
:formactions => [ ['#tabaccount', 'addaccount'],
['#tabuser', 'addusers'],
['#tabadd','adddomain'] ],
:linkactions => [ [] ],
:filteractions => [ [] ] }
when :none
@actions = {}
#when
# @actions = {}
else
@actions = @actions
end
end
def dashcontroller
{:title => @title, :instance => @instance, :actions => @actions }
end
end
end
Так что в основном мне просто нужно передать экземпляр this.dashcontroller
, и я получаю хэш, который мне нужен, с гораздо меньшим количеством хаоса в моих контроллерах. Проблема связана с переменной @instance
. Я хочу передать экземпляр, который я использую, например. @book
, @account
и т. Д., И я получаю это как @book
, @account
и т. Д. Вместо этого я получаю содержимое того, что я туда положил, как :instance => (contents of that instance)
. Это не кажется мне правильным, как прежде, чем я просто использовал, например, @account
, а затем использовать это, но, глядя на него, может не иметь никакого значения в виджете, так как я манипулирую вещами и работаю над своим кодом-фу.
По сути, мой вопрос заключается в том, как протолкнуть переменную экземпляра через такой класс, и при этом иметь доступ к ней по мере ее появления без необходимости каких-либо откатов и преобразований на другой стороне. Возможно, есть лучший способ, но сейчас я работаю над этим.
редактировать: псевдокод
DashControl::DashControl.new("Catchy Title", @book, :none).dashcontroller
#=> {:title => "Catchy Title", :instance => @book, :actions => {} }
Я думаю, что могу работать с ним, как я уже сказал, это больше вопрос моего понимания того, как все происходит, чем реальная ошибка или что-то сложное. Я хотел бы не делать больше гимнастики на другом конце с материалом экземпляра, хотя содержание там есть, и это все, что мне действительно нужно, мне просто нужно немного подумать, чтобы это было меньше беспорядка. Мне действительно нужно уточнить то, что я отправляю через это, или использовать это, чтобы уточнить то, что я посылаю, - это урок, который нужно забрать прямо сейчас.
редактирование:
В итоге я бросил это, но это был опыт обучения ... Я вернулся к виджету и знаю больше, чем когда я изначально настраивал виджет, так что я смог настроить его так, чтобы он занимал только переменная экземпляра и начальная загрузка того, что ему нужно, без добавления другого класса, очистки моих контроллеров и передачи большого количества данных обратно в виджет, где я подозреваю, что это должно было / могло начаться.