users groups groups_users
id |
id |
group_id |
name |
name |
user_id |
description |
description |
|
表groups_users只存在表结构,没有相应的model,controller,views等
表groups_users的生成(该表没有id)
def change
create_table(:groups_users, :id => false) do |t|
t.integer :group_id
t.integer :user_id
t.timestamps
end
end
model中
class Group < ActiveRecord::Base
has_and_belongs_to_many :users
attr_accessor :user_id
end
class User < ActiveRecord::Base
has_and_belongs_to_many :groups
end
groups的show(haml)
= semantic_attributes_for @group do |attr|
= attr.attributes do
= attr.attribute :name
= attr.attribute :description
= attr.attributes "group_users" do
- if @group.users
- @group.users.each do |u|
= attr.attribute "user:", :value => u.name
= button_to "删除组员", { :action => "delete_groupmember", :id => @group.id, :user_id => u.id,
:confirm => "您确定要删除吗?", :method => :delete}
= semantic_form_for(@group, :url => {:action => "add_user_to_group"}, :html => {:method => :post}) do |f|
= f.inputs do
= f.hidden_field :id
= f.input :user_id, :collection => User.all
= f.buttons do
= f.commit_button
groups中的controller
def add_user_to_group
@group = Group.find(params[:group][:id])
unless params[:group][:user_id].blank?
@user = User.find(params[:group][:user_id])
@group.users << @user unless @group.users.any?{ |u| u == @user }
redirect_to @group, :notice => I18n.t("flash.groups.grouping_success.notice")
else
redirect_to @group, :notice => I18n.t("flash.groups.grouping_failed.notice")
end
end
方法push_with_attributes( )和<<方法的作用一样,都是给两个Model之间设置连接
def delete_groupmember
@group = Group.find(params[:id])
@user = User.find(params[:user_id])
@group.users.delete(@user)
redirect_to @group, :notice => I18n.t("flash.groups.delete_groupmember.notice")
end
或者通过checkboxes来实现HABTM关系
<% for group in Group.find(:all) %>
<div>
<%= check_box_tag "user[group_ids][]", category.id, @uer.groups.include?(group) %>
<%= group.name %>
</div>
<% end %>
controller中
params[:user][:group_ids] ||= []
具体请见:
http://asciicasts.com/episodes/17-habtm-checkboxes
http://asciicasts.com/episodes/258-token-fields
分享到:
相关推荐
activemodel-associations, 用于普通 ruby 对象的has_many和belongs_to宏 ActiveModel::Associations 用于普通 ruby 对象的has_many 和 belongs_to 宏。安装将此行添加到你的应用程序的Gemfile中:gem 'activemodel-
Rails提供了四种基本的关联类型:` belongs_to`、` has_one`、` has_many` 和 `has_and_belongs_to_many`。这些关联允许我们建立对象之间的关系,从而在编程时简化数据的存取。 1. `belongs_to` 关联: 这种关联...
偏好 has_many :through 胜于 has_and_belongs_to_many。 使用 has_many :through 允许在 join 模型有附加的属性及验证 # 使用 has_and_belongs_to_many class User < ActiveRecord::Base has_and_...
支持many_to_one / belongs_to,one_to_many / has_many,many_to_many / has_and_belongs_to_many和has_one / one_to_one关联 以不违反外键约束的方式加载灯具的依赖关系图 有一个非常简单的API...
4. **关联**:深入研究Active Record的各种关联类型,如has_many、belongs_to、has_one、has_and_belongs_to_many,以及如何处理关联查询和嵌套关联。 5. **事务**:学习如何使用Active Record事务来保证数据库操作...
特征 楷模用户,角色,移动,舞台用户has_many:字符字符belongs_to :用户字符has_many :动作字符has_many :stages, through: ::moves 阶段has_and_belongs_to_many :移动阶段has_many :characters, ...
ActiveRecord支持多种关联关系,如`has_many`、`belongs_to`、`has_one`和`has_and_belongs_to_many`。这些关联定义了不同模型之间的关系,例如,一个`User`模型可能`has_many``Posts`,表示用户可以有多个帖子。 ...
5. Active Record关联:Rails中的ActiveRecord模型可以定义多种关联,如 belongs_to、has_many、has_one 和 has_and_belongs_to_many。在线考试系统中,试题可能 belongs_to 一个类别,考生 has_many 考试记录。 6....
在 Rails 中,有几种基本的关联类型:`belongs_to`, `has_many`, `has_one`, `has_and_belongs_to_many`等。这些关联类型可以用来表示不同模型之间的关系,例如一对多关系、多对一关系、多对多关系等。 #### 2.1 ...
6. **ActiveRecord associations**:定义模型之间的关系,如属主-从(has_many/belongs_to)、一对一(has_one/belongs_to)和多对多(has_and_belongs_to_many或has_many :through)。 7. **AJAX**:Rails支持无...
ActiveRecord还支持关联,如一对一(has_one),一对多(has_many),多对一(belongs_to)和多对多(has_and_belongs_to_many)关系。例如,如果`users`表和`posts`表有关系,可以这样定义: ```ruby class User ...
此外,Rails提供了强大的关联功能,如一对一(has_one)、一对多(has_many)、多对多(has_and_belongs_to_many)等,允许我们轻松处理复杂的数据关系。例如,一个用户可以有多个帖子(posts): ```ruby class ...
该插件使用PostgreSQL数组的功能实现了在Rails中进行has_and_belongs_to_many关联的替代方法。 在很多情况下,你只需要或的功能使用许多一对多与连接表是不必要的传统方法。 我们可以只存储id的整数数组。 它是如何...
3. **模型中启用分页**:在需要分页的模型中,使用`has_many :through`或`has_and_belongs_to_many`关联时,需要在关联上添加`:finder_sql`选项,以便`will_paginate`可以正确处理分页。 4. **控制器中设置分页参数...
has_and_belongs_to_many :categories validates_presence_of :name, :description validates_acceptance_of :non_disclosure_agreement validates_uniqueness_of :key end ``` 这段代码展示了Rails中的一个...
使用`has_and_belongs_to_many`或`has_many :through`关联来实现这一关系。 接下来,我们关注购物车的持久化。Rails提供了Session存储,可以用来临时存储用户的购物车信息,但这种存储方式不适用于持久保存。因此,...
to,has_many和has_and_belongs_to_many 验证对象数据,包括嵌入式对象类表扩展的行为-例如Model_Ferrari扩展Model_Car扩展芒果。 其他ORM用户非常熟悉的非常简单的语法芒果数据库一个访问MongoDB的简单包装器。 将...
has_and_belongs_to_many 一个简单的DSL,用于配置要复制的字段。 DSL可以应用于您的Rails模型或即时使用。 支持STI(单表继承)子代继承其父变形虫设置。 多种配置样式,例如包含,排除和不
通常我们所说的关联关系包括下面三种: ◇ 一对一关联 : ONE_TO_ONE , 包括 HAS_ONE 和 BELONGS_TO ◇ 一对多关联 : ONE_TO_MANY , 包括 HAS_MANY 和 BELONGS_TO ◇ 多对多关联 : MANY_TO_MANY 关联定义 数据表...
- **关联**:定义模型之间的关系,如 `has_many`, `belongs_to`, `has_one`, `has_and_belongs_to_many` 等。 - **验证**:确保数据的有效性。 - **回调**:在特定的时间点执行代码。 **5.4 视图和模板** - **ERB*...