无法在rails has_many中查询:通过关系

问题描述:

我试图让我的关系解决,但我无法使用这些关联。无法在rails has_many中查询:通过关系

所以我有三种型号User,ShopAccess。一个用户应该有很多商店,一个商店应该有很多用户。

的车型有:

class User < ActiveRecord::Base 
    has_many :accesses 
    has_many :stores, through: :accesses 
end 

class Store < ActiveRecord::Base 
    has_many :accesses 
    has_many :users, through: :accesses 
end 

class Access < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :store 
end 

相应的模式是

ActiveRecord::Schema.define(version: 20140108102103) do 

    create_table "accesses", force: true do |t| 
    t.integer "user_id" 
    t.integer "store_id" 
    t.string "permission" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

    create_table "stores", force: true do |t| 
    t.string "tin" 
    t.text  "address" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.string "store_name" 
    t.float "credit" 
    end 

    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, null: false 
    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" 
    t.datetime "updated_at" 
    end 

    add_index "users", ["email"], name: "index_users_on_email", unique: true 
    add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true 

end 

现在,当我查询User.first.stores

ActiveRecord::HasManyThroughAssociationNotFoundError: Could not find the association :accesss in model User 

有没有人有,为什么我收到此错误的任何想法?

+0

你百分之百确定你有'类用户 kddeisz

+0

是的,我完全确定。 – Peeyush

我在黑暗中那种在这里取景,但尝试:

# config/initializers/inflections.rb 
ActiveSupport::Inflector.inflections do |inflect| 
    inflect.irregular 'access', 'accesses' 
end 
+0

这实际上工作!你能告诉我什么是错的,这个代码在做什么? – Peeyush

+1

“Inflector”将单词转换为复数,将类名转换为表名,将模块化类名转换为没有的类,并将类名转换为外键。对于复数形式,单数形式和不可数单词的默认拐点保存在'inflections.rb'中。 http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html(请参阅“ActiveSupport :: Inflector :: Inflections”帮助) – wacko

我复制一个新项目的所有代码。

=> #<User id: 1, email: "[email protected]", encrypted_password: "", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: "2014-01-08 16:52:01", updated_at: "2014-01-08 16:52:01"> 
2.0.0-p353 :004 > User.first 
User Load (0.2ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1 
=> #<User id: 1, email: "[email protected]", encrypted_password: "", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: "2014-01-08 16:52:01", updated_at: "2014-01-08 16:52:01"> 
2.0.0-p353 :005 > User.first.stores 
User Load (0.2ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1 
Store Load (0.2ms) SELECT "stores".* FROM "stores" INNER JOIN "accesses" ON "stores"."id" = "accesses"."store_id" WHERE "accesses"."user_id" = ? [["user_id", 1]] 
=> #<ActiveRecord::Associations::CollectionProxy []> 

一切工作正常。 Rails 4.0.1,ruby 2.0.0-p353。 似乎问题在于其他一些代码。或者在一个错字,但我已经直接从这里复制代码到一个新的模型。

也只是一个盲注:你将每个模型存储在一个单独的文件?