0

ここでの最初の投稿は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 をホストしようとしていますが、残念ながら必要なサポートを受けられません。

乾杯。

4

2 に答える 2

0

質問が heroku server に関連している場合は、リンクを確認してください。そして、ローカルで実行したい場合は、うまくいくrails s -p3001 -e productionかもしれません

于 2012-04-21T07:11:14.950 に答える
0

あなたのsigned_inのようですか?ヘルパーはあなたが望むものではありません。では、最初に何の signed_in をデバッグしますか? 次のように返します。

<%= signed_in? %>

または、signed_in でエラーを発生させることができますか? メッセージとして。

また、セッションの作成後に呼び出す必要がある current_user セッター メソッドを忘れているようです。次のような 3 つのメソッドが必要です。

  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 に移動することをお勧めします。

最後に 1 つのアドバイス:

!self.current_user.nil?

本当に悪いように見えます。bang! の使用を避けるようにしてください。これでうまくいくはずです:

self.current_user
于 2012-04-21T08:36:07.033 に答える