0

Rails の経験はあまりありませんが、以前にいくつかのアプリで使用したことがあります。RubyスクリプトをRailsアプリに移植したいのですが、いくつかの問題が発生しているため、このアプリは異なります。間違った方法で行っていると確信しているので、SOにアドバイスを求めたいと思います。

スクリプトはいくつかの方程式を生成します。コントローラーでヘルパー (または何か) を呼び出して、スクリプトで方程式のリストを生成し、それらを JSON またはビューで JS を使用して操作できるものとして渡します。単純にスクリプト ファイルをヘルパー フォルダーにコピーしようとしましたが、コントローラーで作成した新しいルートを介してスクリプト ファイルを初期化しようとすると、次のエラーが発生します: NameError (uninitialized constant UsersController::EquationSettings)。私のモデルがこれらのオブジェクトをすべて含むことを期待しているのかもしれません。

コードスニペット:

新しいコントローラー アクションは users_controller にあります (現在は独自のルートがあります。すべての表示を処理するビューに、equation_list とユーザーを渡すだけでした)。

def list_equations
    @user = User.find(params[:id])

    equation_settings = EquationSettings.new 10
    equation_list_generator = EquationList.new equation_settings
    @equation_list = equation_list_generator.generate

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @user, json: @equation_list }
    end
  end

フォルダー構造: app/controllers/users_controller.rb (上記のコントローラー) app/helpers/equation_helpers/(EquationSettings と EquationList rb ファイルはここにあります)

この @equation_list がビューに渡されたら、他の JSON ハッシュと同じようにアクセスできるようにしたいだけです。私がこれを完全に間違った方法で行っていると思われる場合は、私を正しい方向に向けてみてください。読者の皆様のお時間を大切に、

--アンソニー

4

1 に答える 1

2

コード スニペットから推測すると、アプローチを変更する必要があるかもしれません。いくつかの提案/ポインタ:

  1. ヘルパークラスを使用しようとしているように見えますが、Rails では、インスタンス化するのではなく、単にビューでメソッドを使用するためにヘルパーをモジュールにする必要があります。たとえば、次のようにしapp/helpers/stark_helper.rbます。

    module StarkHelper
      def use_honor
        # winter is coming
      end
    end
    

    それはuse_honorあなたの見解で利用可能になります。

  2. ヘルパー メソッドはビューで自動的に使用可能になりますが、コントローラーでは使用できません。コントローラーでヘルパー メソッドを使用するには (推奨されません。MVC パターンに違反します) 、コントローラー クラスにヘルパーを明示的に含める必要があります。

    class BaratheonController < ApplicationController
      include BaratheonHelper
    
      # stuff
    end
    
  3. ヘルパーなどのプロジェクト ファイルを自動ロードする場合、Railsは、フォルダー構造とファイル名が、そこで定義されているモジュールとクラスの名前を反映していると想定します。たとえば、Rails で をapp/helpers/lannister.rb定義した場合、Rails はファイルをロードしませんmodule LannisterHelper。そのファイル名を に変更する必要がありますlannister_helper.rb。( lannister_helper.rb-> LannisterHelper)

  4. 私が言及した自動読み込みのもう 1 つの重要な側面は、サブフォルダーがサブクラスとサブモジュールを反映することが期待されるということです。したがって、 がある場合app/helpers/greyjoy_helper/greyjoy_boat_names.rb、そのファイルには次の定義が必要です。

    module GreyjoyHelper
      module GreyjoyBoatNames
        # stuff
      end
    end
    
于 2012-10-14T00:18:22.823 に答える