在我的rails应用程序中,有很多页面不需要您登录即可查看。例如,某个用户的个人资料页面。如果该页面需要您登录,则当前会话逻辑将重定向回上一页。如果不是,则像配置文件页面一样,然后单击“登录”并登录,它会将您带到在其中指定的网址我的SessionsController动作。这使我走到了十字路口。我需要在每个页面上使用一个模式layouts/application.html.erb
)具有会话表单,因此用户可以单击“登录”,模型将打开,并且在他们登录时,只需刷新页面即可使用户停留在当前页面上。但是,我现在正在尝试并遇到一些错误。另一个选择是拥有单独的登录页面,但是无论您来自应用程序中的哪个页面,它都会将您重定向回。不幸的是,我不确定如何为此编写代码。
这是我目前正在尝试通过模式在每个页面上使用Session表单的代码。
**SessionsController #create action**
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
sign_in user
redirect_back_or request.original_url
else
flash.now[:error] = "Invalid email/password combination."
render 'new'
end
end
**layouts/application.html.erb**
<% unless signed_in? %>
...modal code
<%= form_for(:session, url: sessions_path) %>
<%= text_field ... %>
<%= password_field .... %>
<%= submit button %>
<% end %>
... # I've shorted the code here obviously
<% end %>
该表格在/login
页面上可以正常工作:match '/login', to: "sessions#new", via: "get"
但是,当我在其他页面上使用此表单时,出现此错误:
`Missing template public/error with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}. `
并转到此页面:
http://localhost:3000/sessions
如何使此Sessions表单在网站的每个页面上都能正常工作?谢谢
更新资料
在玩了更多之后,我意识到当我将SessionController中的代码更改为
redirect_back_or profile_path(user)
而不是当前
redirect_back_or request.original_url
如何重定向回我当前所在的页面,而不是指定特定页面(如个人资料页面)?
我想我找到了答案。如果您有更好的解决方案,请仍然回答。
redirect_back_or :back
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句