【问题标题】:Rails Unitialized Constant in controller控制器中的Rails未初始化常量
【发布时间】:2014-05-18 10:47:24
【问题描述】:

这是ActiveRecord having 2 FKs from the same column in a table 的后续问题,我收到消息“未初始化的常量 User::Message”,但我不知道是什么原因造成的。

我的消息控制器的创建操作是

def create
@message = current_user.packages.build(message_params)
@message.sender = current_user
@message.receiver = User.find(params[:id])
@message.date = Time.now
if @message.save
  flash[:success] = "Message Created!"
else
  flash[:danger] = "Message Not Created!"
end

 redirect_to user_path
end

我将控制器添加到我的 routes.rb 文件中

resources :messages, only: [:create, :destroy]

我的用户控制器的操作是

def show
@user = User.find(params[:id])

@message = @user.messages.build #error is thrown here

@package_feed_items = @user.packages.paginate(page: params[:page],:per_page => 5)
@route_feed_items = @user.routes.paginate(page: params[:page],:per_page => 5)
end

该表单位于视图目录中我的“消息”文件夹的一部分中。这是从我的用户控制器中的视图调用的

<%= render 'messages/create_message_modal' %>

我的消息模型现在是

class Message < ActiveRecord::Base
  belongs_to :sender, class_name => :user, foreign_key => 'sender_id'
  belongs_to :receiver, class_name => :user, foreign_key => 'receiver_id'

  default_scope -> { order('created_at DESC') }

  validates :receiver_id, presence: true
  validates :sender_id, presence: true
  validates :body, presence: true
  validates :date, presence: true

  state_machine :initial => :unOpened do
   state :unOpened, value: "Un-Opened"
   state :opened, value: "Opened"
   state :deleted, value: "Deleted"

   event :open do
     transition :unOpened => :opened
   end

   event :delete do
     transition :opened => :deleted
   end
 end
end

我的用户模型是

class User < ActiveRecord::Base
    ... other relations ... 
    has_many :messages
    ... validation & state machine ...
end

编辑 我的日志文件的尾部

Completed 500 Internal Server Error in 8ms

NameError (uninitialized constant User::Message):app/controllers/users_controller.rb:33:in `show'


  Rendered /Users/jeff/.rvm/gems/ruby-2.0.0-p247/gems/actionpack-4.0.1/lib/action_dispatch/middleware/templates/rescues/_source.erb (0.4ms)
  Rendered /Users/jeff/.rvm/gems/ruby-2.0.0-p247/gems/actionpack-4.0.1/lib/action_dispatch/middleware/templates/rescues/_trace.erb (0.7ms)
  Rendered /Users/jeff/.rvm/gems/ruby-2.0.0-p247/gems/actionpack-4.0.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.8ms)
  Rendered /Users/jeff/.rvm/gems/ruby-2.0.0-p247/gems/actionpack-4.0.1/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (11.2ms)

【问题讨论】:

  • 您介意向我们展示错误日志吗?
  • 请同时发布您的消息模型。两个模型都在 app/models 下吗?它们的文件名是什么?
  • 我刚刚发布了完整的模型。我所有的模型都在 app/models 文件夹下,它们被称为 message.rb 和 user.rb

标签: ruby-on-rails ruby activerecord ruby-on-rails-4


【解决方案1】:

为用户模型指定 class_name 选项,如下所示,

class User < ActiveRecord::Base
  has_many :messages, class_name: 'Message'
end

试试这个它应该可以工作,无论如何你需要找出直接关系不工作的原因。

【讨论】:

  • 不幸的是,这并没有解决问题。谢谢你的建议
猜你喜欢
  • 2018-03-27
  • 2013-11-18
  • 2015-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-08
相关资源
最近更新 更多