首先发布在SO上。我对Ruby on Rails相对较新,我一直在阅读Michael Hartl的书“Ruby on Rails Tutorial - Learn by Example”。但是,在运行我的应用程序时遇到以下问题,我很慷慨解决。
1)当我尝试在“生产”模式下运行我的应用程序时,我更新了文件'config / environments.rb',如下所示:
# force Rails into production mode when
# you don't control web/app server and can't set it the proper way
ENV['RAILS_ENV'] ||= 'production'
但是,当我运行应用程序时,我仍然可以从文件'app / views / layouts / application.html.erb'中看到调试器工具。
<!-- Debug applies only to 'development' environment -->
<%= debug(params) if Rails.env.development? -%>
<!-- as determined by "if Rails.env.development?" -->
这让我相信我仍然在开发模式下运行应用程序。
2)对于那些已经问过有关signin_path问题的人,我仍然看不到为我修复它的解决方案。我可以注册用户,然后自动将其重定向到他们的个人资料空间。但是,导航菜单不会相应更改:
<nav class="round">
<ul>
<li><%= link_to "Home", root_path -%></li>
<li><%= link_to "Support", support_path -%></li>
<% if signed_in? %>
<li><%= link_to "Users", users_path -%></li>
<li><%= link_to "Profile", current_user -%></li>
<li><%= link_to "Settings", edit_user_path(current_user) -%></li>
<li><%= link_to "Sign out", signout_path, :method => :delete -%></li>
<% else %>
<li><%= link_to "Sign in", signin_path -%></li>
<% end %>
以下是'app / helpers / sessions_helper.rb'文件中的代码:
def current_user # GET current_user
@current_user ||= user_from_remember_token
end
def signed_in?
!self.current_user.nil?
end
.
.
.
private
def user_from_remember_token
User.authenticate_with_salt(*remember_token)
end
def remember_token
cookies.signed[:remember_token] || [nil, nil]
end
欢迎任何帮助。我目前正在尝试托管我的应用程序Heroku,但遗憾的是没有得到我需要的支持。
干杯。
答案 0 :(得分:0)
如果问题与heroku服务器有关,请检查link。如果您想在本地运行,rails s -p3001 -e production
可能正常工作
答案 1 :(得分:0)
好像是你的签名?助手不是你想要的。那么首先调试signed_in是什么?像这样返回:
<%= signed_in? %>
或者您可以使用signed_in引发错误?作为一条信息。
此外,您似乎忘记了current_user setter方法,该方法应在创建会话后调用。你需要有三种方法:
def current_user
@current_user ||= User.find_by_id(session[:user_id])
end
def user_signed_in?
!!current_user
end
def current_user=(user)
@current_user = user
session[:user_id] = if @current_user ? current_user.id : nil
end
我建议您将此方法作为受保护的方法移动到ApplicationController。
最后一条建议:
!self.current_user.nil?
看起来很糟糕。尽量避免使用爆炸!这应该对你有用:
self.current_user