考虑这两种资源:用户和组。
规则:
- 组由用户所有
- 一个组包含许多用户
- 一个用户可以有许多组
- 一个用户可以参加许多组
我所拥有的:
class User
has_many :groups, :foreign_key => "owner_id"
has_and_belongs_to_many :attended_groups,
:class_name => "Group",
:join_table => "groups_members",
:foreign_key => "member_id"
end
class Group
belongs_to :owner, :class_name => "User", :foreign_key => "owner_id"
has_and_belongs_to_many :members, :class_name => "User",
:join_table => "groups_members",
:association_foreign_key => "member_id"
end
我的问题是:在组控制器中添加操作的最佳(优雅的?)解决方案是什么?当所有者看到他的组(和所有成员)时,让它看看谁不在那里,也许可以添加它。比如:/groups/1/add_member/2。用户在看到组的页面时添加组也是一样的。
我已经设法使它发挥作用,但我想看看它应该如何。这个问题太简单了,不可能有像我这样复杂的解决方案。也许我模拟问题的方式也不是最好的方式。
郑重声明,我是Rails的新手。
请评论!提前感谢!
您可能想要创建一个嵌套的资源模式。不过,它遵循REST,所以您将不得不处理url的命名约定。
resources :groups do
resources :users
end
这是一个很好的资源:http://guides.rubyonrails.org/routing.html#resource-路由轨道默认
为了将现有用户添加到现有组中,我可能会定义一个新的路由。
match '/groups/:group/users/add' => 'groups#add'
这个在控制器中
@group = Group.find params[:group]
@user = User.find params[:user]
@group.users << @user if @user