所以,我有一堆常见问题解答,并且我添加了宝石"Act As List"来改变Faq向上或向下移动Q& 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
答案 0 :(得分:1)
(为了完整起见,将其添加为答案)
当您运行create_table迁移时,acts_as_list正在启动,您没有定义位置列(因此也不是属性)。如果您刚开始将这些列添加到create_table迁移本身,而不是进行两次迁移。