В Rails я получаю NoMethodError при вызове функции в новой модели - PullRequest
2 голосов
/ 09 июля 2010

У меня есть модель под названием Action.Это выглядит так:

class Action < ActiveRecord::Base
  def register_action(email,type)
    @action = new()
    @action.guid = "123456789"
    @action.email = email 
    @action.action = type 

    action.guid if @action.save 
  end
end

Если я пытаюсь получить доступ к этому классу из моего user_controller, я получаю ошибку.Код, который я пытаюсь использовать:

if (@User.save)
  guid = Action.inspect() 
  guid = Action.register_action(@User.email,"REGISTER")
  MemberMailer.deliver_confirmation(@User,guid)
end

Action.inspect () работает нормально, поэтому я предполагаю, что класс Action можно увидеть, но строка, которая вызывает register_action возвращает следующую ошибку:

NoMethodError in UserController#createnew
undefined method `register_action' for #<Class:0x9463a10>
c:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:1994:in `method_missing'
E:/Rails_apps/myapp/app/controllers/user_controller.rb:32:in `createnew'

Что я делаю не так?

Я новичок в Rails, поэтому извиняюсь за глупость.

Ответы [ 3 ]

6 голосов
/ 09 июля 2010

Проблема в этой строке:

guid = Action.register_action(@User.email,"REGISTER")

register_action - это метод экземпляра, а не метод класса, поэтому вы вызываете его для экземпляра класса Action, а не для самого класса Action.

Если вы хотите определить register_action как метод класса, вы должны сделать это следующим образом:

def self.register_action(email, type)
  # ... Body ...
end
2 голосов
/ 09 июля 2010

Изменение

def register_action(email,type)

до

def self.register_action(email,type)

или

def Action.register_action(email,type)
0 голосов
/ 09 июля 2010

В вашем register_action методе вам нужно сделать @action = Action.new вместо @action = new().В качестве альтернативы вы можете создать его следующим образом:

@action = Action.new(:guid => "123456789", :email => email, :action => type)

Кроме того, вы определили register_action как метод экземпляра для вашего Action класса, но вы вызываете его как метод класса с помощью Action.register_action.Измените его на:

def self.register_action(email, type)
  ...
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...