2013-01-11 33 views
0

我已經建立了一個使用has_many:through的自引用協會,基本上就像這個Railscast上描述的:http://railscasts.com/episodes/163-self-referential-association如何保存has_many:通過自我引用協會

某些「活動」的行爲有點像「文章」,並且有一組關聯的其他活動,因此命名了連接表。這有點令人困惑......我知道。

我很難讓事情保存正確。這裏是我有什麼...

activity.rb

class Activity < ActiveRecord::Base 
    has_many :article_activities 
    has_many :activities, :through => :article_activities 
    accepts_nested_attributes_for :activities 
end 

article_activity.rb

class ArticleActivity < ActiveRecord::Base 
    attr_accessible :article_id, :activity_id 
    belongs_to :activity 
    belongs_to :article, :class_name => "Activity" 
end 

articles_controller.rb

class ArticlesController < ApplicationController 

    def new 
    @activity = Activity.new 
    @activity.is_article = true 
    @user_activities = current_user.activities 
    end 

    def create 
    @activity = Activity.new params[:activity] 
    @activity.is_article = true 
    @activity.user = current_user 

    if @activity.save 
     redirect_to root_path, :notice => "Article created!" 
    else 
     render :action => "new" 
    end 
    end 

new.html.haml

= simple_form_for @activity, :url => articles_path do |f| 
/Other fields omitted for clarity 
    = f.association :activities, :collection => @user_activities 

所以,當在create動作提交表單,@activity已經預期@activity.activities。但是,在保存@activity並重新加載記錄時,@activity.activities爲空。

任何想法如何保存關聯?

回答

0

我想出了這一個。我不得不爲模型添加一個「外文」的foreign_key ...

class ArticleActivity < ActiveRecord::Base 
    attr_accessible :article_id, :activity_id 
    belongs_to :activity 
    belongs_to :article, :class_name => "Activity", :foreign_key => "article_id" 
end 

class Activity < ActiveRecord::Base 
    belongs_to :user 
    has_many :article_activities, :foreign_key => "article_id" 
    has_many :activities, :through => :article_activities 
end