NoMethodError:未定义的方法`position&#39; for#<faq:0x00000108195e70> </faq:0x00000108195e70>

时间:2014-09-27 22:02:40

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

所以,我有一堆常见问题解答,并且我添加了宝石"Act As List"来改变Faq向上或向下移动Q&amp; A的位置。但是,每次运行rake db:migrate时都会出现以下错误:

== 20140801122511 CreateFaqs: migrating =======================================
-- create_table(:faqs)
   -> 0.0997s
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

undefined method `position' for #<Faq:0x00000108195e70>/usr/local/rvm/gems/ruby-2.1.1/gems/activemodel-4.0.4/lib/active_model/attribute_methods.rb:439:in `method_missing'
/usr/local/rvm/gems/ruby-2.1.1/gems/activerecord-4.0.4/lib/active_record/attribute_methods.rb:167:in `method_missing'
/usr/local/rvm/gems/ruby-2.1.1/gems/acts_as_list-0.4.0/lib/acts_as_list/active_record/acts/list.rb:448:in `check_top_position'
/usr/local/rvm/gems/ruby-2.1.1/gems/activesupport-4.0.4/lib/active_support/callbacks.rb:377:in `_run__2595859388242035249__validation__callbacks'
/usr/local/rvm/gems/ruby-2.1.1/gems/activesupport-4.0.4/lib/active_support/callbacks.rb:80:in `run_callbacks'
/usr/local/rvm/gems/ruby-2.1.1/gems/activemodel-4.0.4/lib/active_model/validations/callbacks.rb:106:in `run_validations!'
/usr/local/rvm/gems/ruby-2.1.1/gems/activemodel-4.0.4/lib/active_model/validations.rb:314:in `valid?'
/usr/local/rvm/gems/ruby-2.1.1/gems/activerecord-4.0.4/lib/active_record/validations.rb:70:in `valid?'
/usr/local/rvm/gems/ruby-2.1.1/gems/activerecord-4.0.4/lib/active_record/validations.rb:77:in `perform_validations'
/usr/local/rvm/gems/ruby-2.1.1/gems/activerecord-4.0.4/lib/active_record/validations.rb:57:in `save!'
/usr/local/rvm/gems/ruby-2.1.1/gems/activerecord-4.0.4/lib/active_record/attribute_methods/dirty.rb:41:in `save!'
/usr/local/rvm/gems/ruby-2.1.1/gems/activerecord-4.0.4/lib/active_record/transactions.rb:275:in `block in save!'
/usr/local/rvm/gems/ruby-2.1.1/gems/activerecord-4.0.4/lib/active_record/transactions.rb:330:in `block in with_transaction_returning_status'
/usr/local/rvm/gems/ruby-2.1.1/gems/activerecord-4.0.4/lib/active_record/connection_adapters/abstract/database_statements.rb:211:in `transaction'
/usr/local/rvm/gems/ruby-2.1.1/gems/activerecord-4.0.4/lib/active_record/transactions.rb:209:in `transaction'
/usr/local/rvm/gems/ruby-2.1.1/gems/activerecord-4.0.4/lib/active_record/transactions.rb:327:in `with_transaction_returning_status'
/usr/local/rvm/gems/ruby-2.1.1/gems/activerecord-4.0.4/lib/active_record/transactions.rb:275:in `save!'
/usr/local/rvm/gems/ruby-2.1.1/gems/activerecord-4.0.4/lib/active_record/validations.rb:41:in `create!'
/usr/local/rvm/gems/ruby-2.1.1/gems/activerecord-4.0.4/lib/active_record/validations.rb:37:in `block in create!'

Faq.rb

# == Schema Information
#
# Table name: faqs
#
#  id         :integer          not null, primary key
#  question   :string(255)
#  answer     :text
#  created_at :datetime
#  updated_at :datetime
#  position   :integer
#

class Faq < ActiveRecord::Base
  acts_as_list
  default_scope order('position')
end

faqs_controller.rb

class FaqsController < ApplicationController
  def index
    @banner = Banner.active.first
    @faqs = Faq.all
  end
end

知道这里出了什么问题吗?谢谢!

更新(按此顺序迁移):

create_faws migration:

class CreateFaqs < ActiveRecord::Migration
  def change
    create_table :faqs do |t|
      t.string :question
      t.text :answer

      t.timestamps
    end


end

add_position_to_faqs迁移:

class AddPositionToFaqs < ActiveRecord::Migration
  def change
    add_column :faqs, :position, :integer
  end
end

1 个答案:

答案 0 :(得分:1)

(为了完整起见,将其添加为答案)

当您运行create_table迁移时,

acts_as_list正在启动,您没有定义位置列(因此也不是属性)。如果您刚开始将这些列添加到create_table迁移本身,而不是进行两次迁移。