0

基本的にこのRailscast: http ://railscasts.com/episodes/163-self-referential-associationで説明されているように、has_many:throughを使用して自己参照アソシエーションを設定しました。

一部の「アクティビティ」は「記事」のように機能し、他のアクティビティのセットが関連付けられているため、結合テーブルに名前が付けられます。少し紛らわしいです...わかっています。

私は物事を正しく保存するのに苦労しています。これが私が持っているものです...

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

したがって、フォームを送信する@activityと、createアクションで期待され@activity.activitiesます。@activityただし、レコード を保存して再ロードすると、@activity.activitiesは空になります。

関連付けを保存する方法はありますか?

4

1 に答える 1

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
于 2013-01-11T16:50:19.980 に答える