2

私のレールアプリでアクティブな管理者を設定しています。ジェネレーターを実行してユーザー リソースを作成しましたが、管理ダッシュボードのユーザー リンクをクリックすると、次のように表示されます。

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

州.rb

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

都市.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
4

1 に答える 1

6

この質問は私の問題を解決するのに役立ちました。私はそれを解決する方法を理解するためにコメントを読まなければならなかったので、私はここで答えを提供しています:

所属するbelongs_to関係を含むモデルがある場合、所属する外部キーIDの列名と一致する列名があると、ActiveAdminはそれを気に入らないでしょう。

たとえば、この場合、外部キーは「city_id」ですが、「city」という名前の列もあります。アクティブな管理者はこれが好きではありません。同様に、そもそもその列を持つことは実際には意味がありません。あなたは関係を通して街にアクセスするので。

これを修正するには、都市の列を削除する移行を作成する必要があります。

class RemoveCityFromUser < ActiveRecord::Migration    
  def up 
    remove_column :users, :city
  end
end
于 2013-01-13T23:04:01.083 に答える