【发布时间】:2020-05-02 01:06:24
【问题描述】:
我有一个用户必须填写一个字段而不登录。该字段是一个 email_field。 我需要在我的控制器中获取 email_field 的值才能发送一些文档,为此我尝试将 email 字段的值存储在会话中但是当我检查会话值时它等于 nil 并且我没有知道为什么。
这是带有表单的视图:
<%= form_with model: @email, local: true do |form|%>
<% if @email.errors.any? %>
<div id="error explanation">
<h2>Erreur : </h2>
<ul>
<% @email.errors.full_messages.each do |message|%>
<li><%=message%></li>
<% end %>
</ul>
</div>
<% end %>
<div class="form-group">
<%= label_tag :email %> :
<%= form.email_field :email, placeholder: "Insert your email" %>
</div>
<div class="form-group">
<%= form.submit class: "btn btn-primary", value: "Go" %>
</div>
<%end%>
我在控制器中设置会话值的第一步:
def index
session[:email] = Email.last.email
end
我有发布路线的控制器:
def webhooks
render status: 200
session[:email].inspect -> nil
end
还有我的路线文件:
resources :emails
get 'invoice/index' =>'invoice#index'
post 'invoice/webhooks' =>'invoice#webhooks'
所以我的问题是,如何从这个控制器(webhooks 之一)中的会话中获取值? 当我尝试这样做时,我是否走在正确的道路上,还是应该寻找另一种解决方案?
【问题讨论】:
-
在你的 index-method 中,如果 session 不为零,则在设置后检查它的值。 >session[:email] = Email.last.email >puts session[:email].inspect
-
我试过了,结果不是零,当我检查时我收到了正确的电子邮件
-
几件事:如果您的用户在未登录的情况下提交电子邮件,则没有会话。为什么不将此电子邮件存储在一个简单的 cookie 中?另外我不明白
session[:email] = Email.last.email您正在选择电子邮件模型中的最后一封电子邮件,但这与提交的电子邮件无关?? -
也尝试使用 cookie,结果相同。据我了解,当用户在应用程序上时,Rails 会自动生成一个会话,这就是我尝试使用会话的原因。当您遵循漏斗时,提交的电子邮件是电子邮件模型中的最后一封电子邮件,该电子邮件在填写该字段后被选中。但我可能走错了方向,这就是我寻求帮助的原因
标签: ruby-on-rails ruby controller session-cookies session-variables