我想要一个可以全局访问整个应用的变量。用户将填写单个输入字段表单。然后它将保存到数据库中,并且可以在任何地方访问该变量。所以这就是我到目前为止所做的。
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
before_action :save_page
def save_page
@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
end
表单在ApplicaitonController中提交给save_page方法,保存后会重定向。因为这个方法会在成功保存到数据库的情况下重定向,所以它给我带来了问题。我该如何解决这个问题?
我也尝试过但没有运气
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
before_action :page_name
def save_page
@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
def page_name
@user_page_name = @page_name
end
end
但是当我试图在视图中打印@user_page_name的值时,我什么也没得到。
答案 0 :(得分:0)
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
before_action :page_name
def param_page
@page_name=params[:page_name]
end
def save_page
param_page
test_page_name = PageName.new
test_page_name.name = @page_name
if test_page_name.save
redirect_to(controller: 'template',action: 'templates')
end
end
def page_name
param_page
@user_page_name = @page_name
end
end
答案 1 :(得分:0)
首先关闭:
请勿在应用程序控制器中施加控制器操作
其次,我假设,从您发布的代码中,此页面名称对于会话是唯一的?使用PageController
和new
方法创建create
:
class PageController < ApplicationController
def new
@page = Page.new
end
def create
page = Page.new(page_params)
if page.save
session[:page] = page
redirect_to :where_ever
else
render :new
end
end
private
def page_params
params.require(:page).permit(:name)
end
end
现在,您可以通过调用session[:page]
来访问任何控制器或视图中的页面名称。实际上,如果适用,您可以在不向DB保存任何内容的情况下执行此操作。
答案 2 :(得分:-1)
我认为您必须将方法页面名称修改为:
def page_name
save_page#需要为#access实例变量
调用此方法@ user_page_name = @ PAGE_NAME
端
这应该可行。