"неопределенный метод" при вызове вспомогательного метода из контроллера в Rails - PullRequest
40 голосов
/ 05 марта 2010

Кто-нибудь знает, почему я получаю

undefined method `my_method' for #<MyController:0x1043a7410>

когда я вызываю my_method ("string") из моего подкласса ApplicationController? Мой контроллер выглядит как

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

Ответы [ 11 ]

0 голосов
/ 28 июля 2011

У меня была такая же проблема ...

вы можете взломать / обойти его, применить эту логику в модели или создать класс специально для нее Модели доступны для контроллеров, в отличие от этих надоедливых вспомогательных методов.

Вот моя модель "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()
  ...

Это привело к атаке на терминал после того, как я нажал "обновить".

При наличии экземпляров можно вызывать методы в модели. Замените catattack некоторыми кодами. (Это лучшее, что у меня есть)

: помощник все только открывает помощников до просмотра.

Здесь показано, как создать класс и вызвать его. http://railscasts.com/episodes/101-refactoring-out-helper-object?autoplay=true

...