2

Im在我的Rails應用程序中設置活動管理員。我跑的生成器來創建用戶資源,但是當我在用戶點擊管理儀表板鏈接獲取:Active Admin NoMethodError錯誤

NoMethodError in Admin/users#index 

Showing /Users/nelsonkeating/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/activeadmin-0.4.4/app/views/active_admin/resource/index.html.arb where line #1 raised: 

undefined method `city_id_contains' for #<MetaSearch::Searches::User:0x007fde92d69840> 
Extracted source (around line #1): 

1: render renderer_for(:index) 

我不知道什麼是產生這樣或錯誤所在..從任何想法來?謝謝! (請讓我知道如果你需要看到的任何其他文件)

型號:

user.rb 

    class User < ActiveRecord::Base 
    rolify 

    devise :database_authenticatable, :registerable, :confirmable, 
     :recoverable, :rememberable, :trackable, :validatable 

    attr_accessible :province_id, :city_id 
    belongs_to :province 
    belongs_to :city 

province.rb

class Province < ActiveRecord::Base 
     has_many :cities 
     has_many :users 
    end 

city.rb

class City < ActiveRecord::Base 
    belongs_to :province 
    has_many :users 
end 

schema.rb

create_table "users", :force => true do |t| 
    t.string "email",     :default => "", :null => false 
    t.string "encrypted_password",  :default => "", :null => false 
    t.string "reset_password_token" 
    t.datetime "reset_password_sent_at" 
    t.datetime "remember_created_at" 
    t.integer "sign_in_count",   :default => 0 
    t.datetime "current_sign_in_at" 
    t.datetime "last_sign_in_at" 
    t.string "current_sign_in_ip" 
    t.string "last_sign_in_ip" 
    t.datetime "created_at",        :null => false 
    t.datetime "updated_at",        :null => false 
    t.string "name" 
    t.date  "date_of_birth" 
    t.string "address" 
    t.string "gender" 
    t.integer "zipcode" 
    t.string "city" 
    t.string "status" 
    t.string "confirmation_token" 
    t.datetime "confirmed_at" 
    t.datetime "confirmation_sent_at" 
    t.string "unconfirmed_email" 
    t.integer "province_id" 
    t.integer "city_id" 
    end 

create_table "provinces", :force => true do |t| 
    t.string "name" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    end 

create_table "cities", :force => true do |t| 
    t.string "name" 
    t.integer "province_id" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    end 
+0

我在猜測city_id_contains是ActiveAdmin基於關係您的用戶模型共享與其他東西關係生成的方法。 你有什麼其他的模型,他們有什麼關係? – YuKagi

+0

@YuKagi好的謝謝!添加相關模型...通過csv加載省/城市填充選擇列表(不確定是否相關) – js111

+0

您還可以發佈您的schema.rb的相關部分嗎? – YuKagi

回答

6

這個問題幫助我解決了我的問題。我不得不閱讀評論以瞭解如何解決它,所以我在這裏提供答案:

如果您有一個包含belongs_to關係的模型,那麼Active Admin將不會喜歡它,如果您的列名稱匹配你屬於外鍵id列名。

例如,在這種情況下,您的外鍵是'city_id',但您也有一個名爲'city'的列。 Active Admin不喜歡這個。同樣,從一開始就沒有意義。因爲你將通過這種關係進入這個城市。

要解決此問題,您應該創建一個移除城市列的遷移。

class RemoveCityFromUser < ActiveRecord::Migration  
    def up 
    remove_column :users, :city 
    end 
end 
+1

請標記爲答案。 – Pacu