0

私はRailsを初めて使用し/lib/、Railsのディレクトリがどのように機能するか、およびディレクトリで定義された変数を参照/lib/してビューで使用する方法を学習しようとしています。

というファイルがhelloworld.rbあり、Railsの/lib/ディレクトリに保存されています。

このhelloworld.rbファイルのコードは次のとおりです。

module HelloWorld
  def hello
    @howdy = "Hello World!"
  end
end

このメソッドの結果をと呼ばれるビューに表示できるようにしたいので、ファイルindex.html.erbに次のコードを含めます。index_helper.rb

module IndexHelper
  require 'helloworld'
end

また、ビューに次のコードを含めますindex.html.erb

<%= @howdy %>

私は何が欠けていますか?

4

3 に答える 3

1

これらの行のいずれかをconfig/application.rbファイルする必要があります。

module [App name]
  class Application < Rails::Application
    # Dir.glob("./lib/*.rb").each { |file| require file } 
    # config.autoload_paths += %W(#{Rails.root}/lib)
  end
end

コメントされた行のコメントを解除します。それらの両方が同じ仕事をします。

Dir.globアプリ内のすべての.rbファイルを検索し、railsアプリ内の各ファイルを必要とします。

またconfig.autoload_paths、libフォルダ内のすべてのファイルをロードします。

于 2012-11-05T20:32:21.637 に答える
1

インスタンス変数を作成するには、Helloworld::helloを呼び出す必要があります。

コントローラーのbefore_filterに入れることができるかもしれません

require 'helloworld'

class FooController < Application::Controller

  before_filter :setup_hello , [:only=>:create, :edit ]
  def create
     # whatever
  end
  def edit
     #whatever
  end
  def setup_hello
    HelloWorld::hello
  end
end

したがって、編集アクションまたは作成アクションを実行するたびに、「setup_hello」が実行されます。これにより、モジュール内のhelloメソッドが呼び出され、@helloインスタンス変数が設定されます。

于 2012-11-05T20:35:16.440 に答える
0

config/application.rbの自動ロードパスにlibフォルダーを追加する必要があります

# Custom directories with classes and modules you want to be autoloadable.
# config.autoload_paths += %W(#{config.root}/lib)
于 2012-11-05T20:12:35.370 に答える