誰が私が得る理由を知っていますか
undefined method `my_method' for #<MyController:0x1043a7410>
applicationControllerサブクラス内からmy_method( "string")を呼び出すと?私のコントローラーは次のようになります
class MyController < ApplicationController
def show
@value = my_method(params[:string])
end
end
そして私のヘルパー
module ApplicationHelper
def my_method(string)
return string
end
end
そして最後に、ApplicationController
class ApplicationController < ActionController::Base
after_filter :set_content_type
helper :all
helper_method :current_user_session, :current_user
filter_parameter_logging :password
protect_from_forgery # See ActionController::RequestForgeryProtection for details
コントローラーからヘルパーを呼び出すことはできません。複数のコントローラーで使用する必要がある場合は、ApplicationController
にメソッドを作成することをお勧めします。
[〜#〜] edit [〜#〜]:明確にするために、helper :all
呼び出し。 helper :all
は、実際にはビュー側の任意のコントローラーで使用するヘルパーをすべて含んでいます。 Railsの以前のバージョンでは、ヘルパーの名前空間によって、どのコントローラーのビューがヘルパーを使用できるかが決まりました。
これがお役に立てば幸いです。
view_contextはあなたの友達です http://apidock.com/Rails/AbstractController/Rendering/view_context
コントローラとビューの間でメソッドを共有したい場合、さらにオプションがあります:
次のようにapplication_controller.rbファイルにApplicationHelperを含めます。
class ApplicationController < ActionController::Base
protect_from_forgery
include ApplicationHelper
end
これにより、application_helper.rbファイルで定義されているすべてのメソッドがコントローラーで使用可能になります。
個々のコントローラーに個々のヘルパーを含めることもできます。
たぶん私は間違っているが、ヘルパーはビューのためだけではないのか?通常、コントローラーに関数が必要な場合は、子クラスで使用可能なすべての関数としてApplicationControllerに配置します。
gamecreature in この投稿 :
@template
変数。view_context
ヘルパーはビュー用ですが、そのヘルパーファイルをApplicationController.rbに含めるコード行を追加すると、問題を処理できます。あなたの場合、ApplicationController.rbに次の行を挿入します。
include ApplicationHelper
ヘルパーモジュールにmodule_function(*instance_methods)
を追加してみてください。その後、モジュール自体でこれらのメソッドを直接呼び出すことができます。
私の知る限りでは、 helper :all
ヘルパーをビューで使用可能にします...
ヘルパーはビューで使用するためのものであるため、コントローラーでヘルパーを呼び出すことはお勧めできませんが、コントローラーでヘルパーを使用する最良の方法は、application_controllerでヘルパーメソッドを作成してコントローラーに呼び出すことです。
しかし、コントローラーでヘルパーを呼び出す必要がある場合でも
その後、コントローラーにヘルパーを含めるだけです
class ControllerName < ApplicationController
include HelperName
...callback statements..
ヘルパーメソッドをコントローラーに直接呼び出します
module OffersHelper
def generate_qr_code(text)
require 'barby'
require 'barby/barcode'
require 'barby/barcode/qr_code'
require 'barby/outputter/png_outputter'
barcode = Barby::QrCode.new(text, level: :q, size: 5)
base64_output = Base64.encode64(barcode.to_png({ xdim: 5 }))
"data:image/png;base64,#{base64_output}"
end
コントローラ
class ControllerName < ApplicationController
include OffersHelper
def new
generate_qr_code('Example Text')
end
end
お役に立てれば !
これを試して、コントローラーからヘルパー関数に直接アクセスしてくださいview_context.helper_name
私は同じ問題を抱えていました...
あなたはそれをハック/回避したり、そのロジックをモデルに入れたり、特別にクラスを作成したりすることができます。厄介なヘルパーメソッドとは異なり、モデルはコントローラーにアクセスできます。
これが私の「rag.rb」モデルです
class Rag < ActiveRecord::Base
belongs_to :report
def miaow()
cat = "catattack"
end
end
ここに私の「rags_controller.rb」コントローラの一部があります
def update
@rag = Rag.find(params[:id])
puts @rag.miaow()
...
「更新」をクリックした後、これは端末で攻撃を受けました。
インスタンス化を指定すると、モデル内のメソッドを呼び出すことができます。カタタックをいくつかのコードに置き換えます。 (これは今までで最高です)
:helper allは、ビューまでヘルパーのみを開きます。
これは、クラスを作成して呼び出す方法を示しています。 http://railscasts.com/episodes/101-refactoring-out-helper-object?autoplay=true