4

我在我的has_and_belongs_to_many模型中创建新关系时遇到了一些麻烦。我这样定义模型:

journals model

  has_and_belongs_to_many :posts

post model

  has_and_belongs_to_many :journal

我不知道如何创建关联,我做了一个按钮,但我不知道它是如何工作的。我创建了动作add_post

  def add_post
    @journal_post = JournalsPosts.new
  end

我创建此链接以创建关联,但我不知道我现在必须做什么:

<%= link_to "Add to Journal",:controller => "journals",:action => "add_post" %>

重定向工作正常,但我不知道现在如何进行?你知道一些关于HABTM协会的指南吗?我已经尝试过这个,但它没有帮助。

4

2 回答 2

16

在我自己研究之后,你应该能够做到

def add_post
    j = Journal.first # or find_by, etc
    p = Post.first # or find_by, etc
    j.posts << p # creates a record in journals_posts table
    j.save!
end

(1) 接受的答案听起来好像只能直接进行关联。此外,如果您使用 habtm 关联,则不会有“JournalsPosts”类,因为它特别避免使用中间表的模型。

(2) 注意这个关联不是唯一的。如果您多次调用它,您将在 journals_posts 表中获得多个具有相同两个整数对的条目。

于 2014-08-26T06:00:40.660 回答
-3

您应该高度考虑使用has_many, :through,因为这是现在在 Rails 中处理此类关系的首选方式。

也就是说,如果您想继续has_and_belongs_to_many,您需要以某种方式获取要关联的期刊和帖子 ID,以便正确创建关联。

在您的路线中:

resources :journals do
  member do
    put :add_post
  end
end

@journal在您看来(确保您在@post某处设置):

<%= link_to "Add to Journal", add_post_journal_path(@journal, :post_id => @post.id), :method => :put %>

在您的控制器中:

def add_post
  @journals_posts = JournalsPosts.new(:journal_id => params[:id], :post_id => params[:post_id])

  if @journals_posts.save
    ...
  else
    ...
  end
end
于 2013-01-19T17:59:04.197 回答