Ruby on rails 静态页面是否应该访问rails controller和routes.rb中的Cookie?
我确信这是一个明显的问题,但我不明白为什么这不起作用 我发现Ruby on rails 静态页面是否应该访问rails controller和routes.rb中的Cookie?,ruby-on-rails,routes,Ruby On Rails,Routes,我确信这是一个明显的问题,但我不明白为什么这不起作用 我发现routes.rb文件中定义的静态页面似乎无法访问cookie?对吗?我试图读取cookie的值,但下面的页面似乎返回空对象 My routes.rb包含以下内容: scope controller: :static do get :about get :terms get :privacy get :cookies get :returns get :delivery end 为了完整起见,这里是静态控制器:
routes.rb
文件中定义的静态页面似乎无法访问cookie?对吗?我试图读取cookie的值,但下面的页面似乎返回空对象
My routes.rb包含以下内容:
scope controller: :static do
get :about
get :terms
get :privacy
get :cookies
get :returns
get :delivery
end
为了完整起见,这里是静态控制器
:
# frozen_string_literal: true
class StaticController < ApplicationController
before_action :find_order
def index; end
def about; end
def pricing
redirect_to root_path, alert: t('.no_plans') unless Plan.without_free.exists?
end
def terms; end
def privacy; end
def cookies; end
def returns; end
def delivery; end
end
def find_order
@order = if current_user
Order.where(
user: current_user,
basket: true
).first
else
if cookies.dig[:ordernum]
Order.where(
ordernum: cookies[:ordernum],
basket: true
).first
end
end
end
helper_method :find_order
我必须添加对cookies
的检查,然后添加if cookies[:ordernum]
以防止它在静态页面上失败
谢谢你在这方面的帮助
如果有人觉得上面的代码可以更好。。。请让我知道!必须有更好的方法来实现这一点。感觉有点笨重。不相关,但你可以做
if cookies.dig[:ordernum]
而不是两个if
statementsThanks@Eyeslandic。非常感谢。只需检查一下:static_controller.rb是从应用程序控制器继承的吗?我99.9%确定我检查过它是从应用程序控制器继承的@JohnAthaydeTo Rails“静态页面”和任何其他控制器/路由之间绝对没有区别。所以答案是肯定的,这应该有效。你是如何设置cookie的?你是如何测试这一点的?不相关,但你可以做if cookies.dig[:ordernum]
而不是两个if
语句hanks@Eyeslandic。非常感谢。只需检查一下:static_controller.rb是从应用程序控制器继承的吗?我99.9%确定我检查过它是从应用程序控制器继承的@JohnAthaydeTo Rails“静态页面”和任何其他控制器/路由之间绝对没有区别。所以答案是肯定的,这应该有效。你是如何设置cookie的?如何测试这一点?
def find_order
@order = if current_user
Order.where(
user: current_user,
basket: true
).first
else
if cookies.dig[:ordernum]
Order.where(
ordernum: cookies[:ordernum],
basket: true
).first
end
end
end
helper_method :find_order