Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails未初始化的常量Marketing::InviteController::MarketingMailer-仅在某些情况下发生_Ruby On Rails_Ruby_Ruby On Rails 3_Mailer - Fatal编程技术网

Ruby on rails Rails未初始化的常量Marketing::InviteController::MarketingMailer-仅在某些情况下发生

Ruby on rails Rails未初始化的常量Marketing::InviteController::MarketingMailer-仅在某些情况下发生,ruby-on-rails,ruby,ruby-on-rails-3,mailer,Ruby On Rails,Ruby,Ruby On Rails 3,Mailer,我正在尝试创建一个简单的表单来收集电子邮件地址,然后向我发送电子邮件 我随机获得未初始化的常量Marketing::InviteController::MarketingMailer,有时是第一次提交表单,但总是第二次提交,因此如果您转到localhost:3000/request invite,输入电子邮件并提交表单,然后输入电子邮件并再次提交表单,您将得到这个错误 知道我为什么会犯这个错误吗 /控制器/营销/invite_controller.rb class Marketing::Invi

我正在尝试创建一个简单的表单来收集电子邮件地址,然后向我发送电子邮件

我随机获得
未初始化的常量Marketing::InviteController::MarketingMailer
,有时是第一次提交表单,但总是第二次提交,因此如果您转到localhost:3000/request invite,输入电子邮件并提交表单,然后输入电子邮件并再次提交表单,您将得到这个错误

知道我为什么会犯这个错误吗

/控制器/营销/invite_controller.rb

class Marketing::InviteController < ApplicationController

  layout 'marketing/layouts/layout'

  # GET /request-invite
  def new
    @invite = Invite.new

    respond_to do |format|
      format.html # new.html.erb
    end
  end

  # POST /request-invite
  def create
    @invite = Invite.new(params[:invite])

    respond_to do |format|
      if @invite.save
        MarketingMailer.invite(@invite.email).deliver
        format.html { redirect_to request_invite_path, notice: 'Success' }
      else
        format.html { render action: "new", error: 'An error has occurred' }
      end
    end
  end

end

我认为你应该像你在代码中定义的那样引用你的邮件,而不是
MarketingMailer
MarketingMailer

我认为你应该像你在代码中定义的那样引用你的邮件,而不是
MarketingMailer
,这听起来像是自动加载问题。您是否尝试过使用全名引用MarketingMailer常量营销:营销邮递员

Rails不会在开发中加载所有类。相反,当一个类丢失时,Rails会尝试根据一组自动加载路径猜测在项目中的何处查找该类

例如,应用程序文件夹中的所有文件夹都将添加到自动加载路径中。因此,如果您引用Foobar.new,Rails将在您的应用程序/模型或应用程序/控制器中查找Foobar.rb文件,该文件预期包含
类Foobar
定义。然而,当你使用模块时,水会变得更加浑浊

class Foo::Bar
  # some code
  Baz.new
end
Rails现在认为Baz类是在位于子文件夹中的Baz.rb类中定义的,因此它将在自动加载文件夹中查找并搜索根据封闭模块命名的子文件夹,检查app/models/foo/bar/Baz.rb和app/controllers/foo/bar/Baz.rb

当它找不到任何东西时,Rails有不同的解决方法,我不完全理解。但是,如果使用两个冒号作为类引用的前缀,则意味着您是从根命名空间引用的,Rails不应尝试相对于当前模块进行搜索,因此如果我们再次使用上述示例:

class Foo::Bar
  ...

  Baz.new # Searches for foo/bar/baz.rb
  ::Baz.new # Searches for baz.rb
  ::My::Baz.new # Searches for my/baz.rb
  My::Baz.new # Searches for foo/bar/my/baz.rb

  ...
end

在生产模式下,这些问题大部分都会消失,因为Rails会预加载项目中的所有源文件,所以如果在任何文件夹中的任何位置都定义了
Baz
,Rails就不必猜测在哪里可以找到它。它已经存在,因为它已经加载。

听起来像是自动加载问题。您是否尝试过使用全名引用MarketingMailer常量营销:营销邮递员

Rails不会在开发中加载所有类。相反,当一个类丢失时,Rails会尝试根据一组自动加载路径猜测在项目中的何处查找该类

例如,应用程序文件夹中的所有文件夹都将添加到自动加载路径中。因此,如果您引用Foobar.new,Rails将在您的应用程序/模型或应用程序/控制器中查找Foobar.rb文件,该文件预期包含
类Foobar
定义。然而,当你使用模块时,水会变得更加浑浊

class Foo::Bar
  # some code
  Baz.new
end
Rails现在认为Baz类是在位于子文件夹中的Baz.rb类中定义的,因此它将在自动加载文件夹中查找并搜索根据封闭模块命名的子文件夹,检查app/models/foo/bar/Baz.rb和app/controllers/foo/bar/Baz.rb

当它找不到任何东西时,Rails有不同的解决方法,我不完全理解。但是,如果使用两个冒号作为类引用的前缀,则意味着您是从根命名空间引用的,Rails不应尝试相对于当前模块进行搜索,因此如果我们再次使用上述示例:

class Foo::Bar
  ...

  Baz.new # Searches for foo/bar/baz.rb
  ::Baz.new # Searches for baz.rb
  ::My::Baz.new # Searches for my/baz.rb
  My::Baz.new # Searches for foo/bar/my/baz.rb

  ...
end

在生产模式下,这些问题大部分都会消失,因为Rails会预加载项目中的所有源文件,所以如果在任何文件夹中的任何位置都定义了
Baz
,Rails就不必猜测在哪里可以找到它。它已经存在,因为它已经加载。

在生产中也会发生这种情况吗?听起来像是自动加载问题。您是否尝试过使用全名引用MarketingMailer常量<代码>::市场营销::市场营销邮递员
它还没有投入生产。仅在dev.
:Marketing::MarketingMailer.invite(@invite.email).deliver中尝试过。似乎解决了这个问题。这是引用邮件的正确方法吗?我从未见过任何以
开头的引用。另外,你能回答这个问题吗,这样我就可以给你道具了?这在制作中也会发生吗?听起来像是自动加载问题。您是否尝试过使用全名引用MarketingMailer常量<代码>::市场营销::市场营销邮递员
它还没有投入生产。仅在dev.
:Marketing::MarketingMailer.invite(@invite.email).deliver中尝试过。似乎解决了这个问题。这是引用邮件的正确方法吗?我从未见过任何以
开头的引用。还有,你能回答这个问题,这样我就可以给你道具了吗?
class Foo::Bar
  # some code
  Baz.new
end
class Foo::Bar
  ...

  Baz.new # Searches for foo/bar/baz.rb
  ::Baz.new # Searches for baz.rb
  ::My::Baz.new # Searches for my/baz.rb
  My::Baz.new # Searches for foo/bar/my/baz.rb

  ...
end