0

第一次在这里发帖。我对 Ruby on Rails 比较陌生,并且一直在阅读 Michael Hartl 的书“Ruby on Rails 教程 - 通过示例学习”。但是,我在运行我的应用程序时遇到了以下问题,我很乐意得到解决。

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,但不幸的是没有得到我需要的支持。

干杯。

4

2 回答 2

0

如果问题与 heroku 服务器有关,请检查链接。如果你想在本地运行,rails s -p3001 -e production可能会工作

于 2012-04-21T07:11:14.950 回答
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?

看起来真的很糟糕。尽量避免使用 bang!,这应该对你有用:

self.current_user
于 2012-04-21T08:36:07.033 回答