ruby - Override instance variable of parent controller in child controller -
i have 3 controllers inherit applicationcontroller. child controllers are:
homecontroller
index
the home controller has 1 method, index, , renders form.
templatescontroller
templatessave_page_namepreview
the templatescontroller has 3 methods. templates lists templates , preview opens preview of selected template. save_page_name endpoint of form submitted home#index.
designscontroller
homeabout
template#preview renders view iframe contains design#home.
every method in designscontroller requires value set form fetch data from. (data being fetched api.)
now. want create globally accessible variable designcontroller. i.e. want make value come form global. have put code in parent controller
here code:
class applicationcontroller < actioncontroller::base protect_from_forgery with: :exception before_action :page_name def page_name @page_name = '' end end and intend on overriding in template#save_page_name:
def save_page_name @page_name = params[:page_name] test_page_name = pagename.new test_page_name.name = @page_name if test_page_name.save redirect_to(controller: 'template', action: 'templates') end end this form
<%= form_tag({controller: 'application', action: "save_page_name"}, class: "nifty_form") do%> <%= text_field_tag :page_name %> this template controller
class templatecontroller < applicationcontroller def templates end def preview end end design controller
class designcontroller < applicationcontroller def home @info = @page_name //should global var render :template => "design/"+params[:template]+"/home" end end
if change way define page_name method in application controller to:
def page_name @page_name ||= '' end the method page_name default, set @page_name empty string, allow assign different value, via page_name = "something_else"
and - @page_name not global variable. instance variable of controller class. when app calls controller, instance of controller class used, , instance variable available within context of controller instance.
Comments
Post a Comment