Incapable de requête dans un rails de has_many :à travers la relation
-
20-12-2019 - |
Question
Je suis en train d'essayer d'obtenir mes relations a marché, mais j'ai de la difficulté à l'aide de la associations.
J'ai donc trois modèles User
, Shop
et Access
.Un utilisateur doit avoir de nombreux magasins et un magasin doit avoir de nombreux utilisateurs.
Les modèles sont :
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
Le schéma correspondant est
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
Maintenant, quand j'ai une requête User.first.stores
ActiveRecord::HasManyThroughAssociationNotFoundError: Could not find the association :accesss in model User
Quelqu'un a une idée de pourquoi j'obtiens cette erreur?
La solution
Je suis une sorte de prise de vue dans l'obscurité ici, mais essayez:
# config/initializers/inflections.rb
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'access', 'accesses'
end
Autres conseils
J'ai copié tout le code sur un nouveau projet.
=> #<User id: 1, email: "test@test.com", 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: "test@test.com", 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 []>
Tout fonctionne très bien.Rails 4.0.1, ruby 2.0.0-p353.Semble que le problème est dans d'autres codes.Ou une faute de frappe, mais j'ai copié le code directement à partir d'ici dans un nouveau modèle.
Également à seulement un blind shot:avez-vous stocker de chaque modèle dans un fichier séparé?