rails belongs_to has_many请解释

时间:2010-01-26 03:52:41

标签: ruby-on-rails

我有以下内容:

带列的

User模型:

id     user_id     password     created_at     updated_at
带列的

Store模型:

id     store_id    store_name   create_ad      updated_at

基本上用户可以属于多个商店。所以我希望得到一个类似“获取用户所有商店”的查询

我所做的关系是:

class User < ActiveRecord::Base
    belongs_to :store, :foreign_key => "store_id"
end

class Store < ActiveRecord::Base
    has_many    :user, :foreign_key => "store_id"
end

这些是正确的吗?

最终我想知道userid,password和storeid是否应该能够登录。

那么如何在此使用find_byXXX?所以,如果我通过传入userid,password和storeId获得一行...我会知道用户是否应该能够登录?

我注意到之前已经提出过belongs_to和has_many问题,但我无法从这些问题中理解。也许特定于我的问题的答案将有所帮助...

3 个答案:

答案 0 :(得分:0)

所以你说过一个用户属于很多商店。有多少用户属于一个商店? 如果答案大于1,那么您需要的是has_and_belongs_to_many和第三个数据库表。该表基本上包含一对(store_iduser_id)。

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

虽然Rails不需要它,但建议您为此关系创建一个模型,并在该模型上建立双向关系。你以后会感谢自己。

class User < ActiveRecord::Base
    has_many :userstores
    has_many :stores, :through => :userstores
end

class Store < ActiveRecord::Base
    has_many :userstores
    has_many :users, :through => :userstores
end

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

答案 1 :(得分:0)

您正在寻找has_and_belongs_to_many关系。您的表格和模型应如下所示:

用户表:

id password created_at updated_at

商店表:

id store_name created_at updated_at

加入表(称为stores_users):

store_id user_id

在你的模特中:

class User < ActiveRecord::Base
   has_and_belongs_to_many :stores
end

class Store < ActiveRecord::Base
    has_and_belongs_to_many :users
end

获取用户的商店:

User.stores

有关详细信息,请参阅the rails API

答案 2 :(得分:0)

您似乎对ActiveRecords在基本级别的工作方式做了很多错误的假设,因此我建议您阅读官方且非常直截了当的ActiveRecord Associations guide