未定义的局部变量或方法<object> for#<class:0x55ebe50> </class:0x55ebe50> </object>

时间:2014-12-02 01:25:48

标签: ruby-on-rails polymorphism

我在Rails中遇到多态问题。

我有这些文件:

class CreateExecutions < ActiveRecord::Migration
  def change
    create_table :executions do |t|
      t.integer :player_space_id
      t.integer :what_id
      t.references :what, polymorphic: true 
      t.integer :qty
      t.integer :level
      t.datetime :when_ready

      t.timestamps
    end
  end
end

class Execution < ActiveRecord::Base
    belongs_to :what, :polymorphic => true
end

class Element < ActiveRecord::Base
    belongs_to :game_space
    has_many :levels
    has_many :player_elements
    has_many :executions, :as => what
end

class PlayerSpace < ActiveRecord::Base
    belongs_to :game_space
    belongs_to :user
    has_many :executions, as: :what
end

当我运行一个有Element的控制器时,我有这个错误:

PlayerSpacesController中的NameError#show 未定义的局部变量或方法`#/ p>的'what'

愿你帮帮我

1 个答案:

答案 0 :(得分:2)

Element课程中有一个小错字: 改变这个:

class Element < ActiveRecord::Base
  #...
  has_many :executions, :as => what
end

对此:

class Element < ActiveRecord::Base
  #...
  has_many :executions, :as => :what
end

例如,你错过了“什么”的冒号,这意味着它不是一个符号,而是一个变量或方法。由于您没有名为what的变量或方法,因此Ruby会抛出'未命名的变量或方法'错误。