轨道中全球可访问的变量

时间:2015-10-03 03:26:18

标签: ruby ruby-on-rails-4

我想要一个可以全局访问整个应用的变量。用户将填写单个输入字段表单。然后它将保存到数据库中,并且可以在任何地方访问该变量。所以这就是我到目前为止所做的。

    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的值时,我什么也没得到。

3 个答案:

答案 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)

首先关闭:

  

请勿在应用程序控制器中施加控制器操作

其次,我假设,从您发布的代码中,此页面名称对于会话是唯一的?使用PageControllernew方法创建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

这应该可行。

相关问题