我是一个刚开始使用Rails的开发人员,我构建了一些更简单的应用程序。但是,我是否有一个项目需要我构建一个具有用户和"用户组的Web应用程序"有帖子。
用户应该能够加入群组,然后将帖子发布到群组中。除此之外,我还希望用户能够在"仪表板中看到他们所属的组中的最新帖子" "流速" (像facebook流程)。我想知道在这种情况下关系应该如何?
我已经读过,has_many_through是一种构建属于群组的用户的好方法,但是我应该如何建立关系以便群组也有帖子呢?
答案 0 :(得分:0)
在我看来,这可能是一个好方法:
def User < ActiveRecord::Base
has_many :groups, through: :membership
has_many :posts
end
def Membership < ActiveRecord::Base
has_one :user
belongs_to :group
end
def Group < ActiveRecord::Base
has_many :users, through: :membership
has_many :posts
end
def Post < ActiveRecord::Base
belongs_to :user
belongs_to :group
end
答案 1 :(得分:0)
如果用户正在创建帖子,那么将帖子属于用户是有意义的。但是用户在一个组中发帖,因此帖子也可以属于一个组。
因此,每个用户has_many
发帖,每个群组has_many
也会发布。
要最初(通过联接表)链接用户和群组,您可以使用has_many_and_belongs_to
关系。
运行rails g model User name:string
以生成迁移:
#create_users
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
<other fields...>
t.timestamps
end
end
end
和基本模型:
class User < ActiveRecord::Base
end
运行rails g model Group name:string
以生成迁移:
#create_groups
class CreateGroups < ActiveRecord::Migration
def change
create_table :groups do |t|
t.string :name
<other fields...>
t.timestamps
end
end
end
和基本模型:
class Group < ActiveRecord::Base
end
最初链接用户和群组(会员资格表)......
运行rails g migration CreateJoinTableUserGroup user group
以生成:
class CreateJoinTableUserGroup < ActiveRecord::Migration
def change
create_join_table :users, :groups
end
end
继续创建一个posts
表:rails g migration CreatePosts
。并将迁移更改为:
class CreatePosts < ActiveRecord::Migration
def change
create_table :posts do |t|
t.string :text
t.belongs_to :user
t.belongs_to :group
<other fields...>
t.timestamps
end
end
end
此时,您需要运行rake db:migrate
。
这是我为模特做的事情:
class User < ActiveRecord::Base
has_many :posts
has_and_belongs_to_many :groups, :join_table => :groups_users
end
class Group < ActiveRecord::Base
has_many :posts
has_and_belongs_to_many :users, :join_table => :groups_users
end
class Post < ActiveRecord::Base
belongs_to :user
belongs_to :group
end
希望有所帮助!