2014-09-24 63 views
3

我得到了我想要的 - 拥有并属于许多关联,使用Rails指南中的简单指令。在控制台中它一切正常,但我坚持以下。Rails关联:通过控制台访问连接表(HABTM)

比方说,我有两个型号文章类别,二者均具有指令has_and_belongs_to_many在他们的模型和对应于数据库中的表articles_categories。在轨道控制台,我可以看到联想有这样的语句,因为这些工作:

%> @x = Article.find(1) 
%> @x.categories 

这样,我有内部存储@x类的集合。精彩。但是我无法真正找到一种方法,我可以通过控制台添加一个新类别。现在,我正在使用SQL将值插入到连接表中。我希望有一个更聪明,Railsy办法做这样的事情

%> @x.article.categories.category_id = 1 # id of category 
%> @x.article.categories.article_id = 1 # id of article 
%> @x.save # and written to the database 

我专门找在轨控制台来做到这一点的方式 - 让我真正得到正在发生的事情,而不是感觉代码片段工作,我不明白。我正在使用Rails 4.1.6

回答

6

您可以简单地添加到categories集合,并且Rails将管理数据库关系。

> category = Category.find(1) 
> article = Article.find(1) 
> article.categories << category 
> article.save 

这将增加一个articles_categories战绩为1的article_id的和为1。CATEGORY_ID而且,甚至更好,对象会了解对方:

> article.categories.include?(category) # => true 
> category.articles.include?(article) # => true 
+1

属性也可以这么容易?如果这样做,我宣布你是上帝! – MiningSam 2014-09-24 20:54:41

+0

我真的很爱你。 – MiningSam 2014-09-24 20:59:13

1

你为什么不尝试:

@article.categories.build (params) 

其中PARAMS将包含新的类别

+2

你不需要设置一个accept_nested_attributes_for来做到这一点(并将HABTM改为has_many)? – Kevin 2014-09-24 20:35:15