如何在HABTM Rails协会中创建记录



我在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协会的指南吗?我已经试过了,但是没有用。

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

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)被接受的答案使它听起来好像只能直接建立联系。此外,如果您使用的是习惯关联,则不会有"JournalsPosts"类,因为它特别避免了为中间表使用模型。

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

您应该高度考虑使用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

相关内容

  • 没有找到相关文章

最新更新