Frage

Ich versuche, meine Beziehungen zu klären, aber es fällt mir schwer, die Assoziationen zu nutzen.

Ich habe also drei Modelle User, Shop Und Access.Ein Benutzer sollte viele Shops haben und ein Shop sollte viele Benutzer haben.

Die Modelle sind:

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

Das entsprechende Schema ist

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

Wenn ich jetzt nachfrage User.first.stores

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

Hat jemand eine Idee, warum ich diesen Fehler erhalte?

War es hilfreich?

Lösung

Ich tappe hier irgendwie im Dunkeln, aber versuchen Sie es:

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

Andere Tipps

Ich habe Ihren gesamten Code in ein neues Projekt kopiert.

 => #<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 []>

Alles funktioniert gut.Schienen 4.0.1, Ruby 2.0.0-p353.Scheint, dass das Problem in einem anderen Code liegt.Oder ein Tippfehler, aber ich habe den Code direkt von hier in ein neues Modell kopiert.

Auch nur ein Blindschuss:Speichern Sie jedes Modell in einer separaten Datei?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top