科学論文を整理する Rails アプリを作成するのに苦労しています。
各論文には多くの参照がある (他の論文) → ある論文は多くの論文を引用している 各論文には多くの引用がある (他の論文、反比例の関係) → 多くの論文に引用されている
私の意図は、このような論文の参照と引用にアクセスできるようにすることです
@paper = Paper.first
@paper.references => [Papers that @paper is citing]
@paper.citations => [Papers that @paper is being cited by]
私が取った手順は次のとおりです。
# console
rails g model paper title # Generate Paper model
rails g model citation paper_id:integer reference_id:integer # Generate Citation Model
# app/models/paper.rb
class Paper < ActiveRecord::Base
# Relations
has_many :reference_relations, class_name: 'Citation'
has_many :citation_relations, class_name: 'Citation', foreign_key: 'reference_id'
# References and citations
has_many :references, through: :reference_relations
has_many :citations, through: :citation_relations, source: :paper
attr_accessible :title
end
# app/models/citation.rb
class Citation < ActiveRecord::Base
belongs_to :paper # Source of the reference, paper that is citing
belongs_to :reference, class_name: 'Paper' # Paper that is being referenced and cited
# attr_accessible :reference_id # This should not be accessible, should it?
end
今、私は参照を構築しようとしています:
p = Paper.first
r = Paper.last
p.references.build(reference_id: r.id)
ただし、引用を作成しようとすると、ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: reference_id
エラーが発生します。私は最初、Citation モデルの attr_accessible を設定する必要があると想定していましたが、ActiveRecord は reference_id を新しい引用インスタンスではなく紙のインスタンスに割り当てようとしていることが判明しました。
2 つの紙を互いに接続する最良の方法は何ですか?また、これらの接続を構築するにはどうすればよいですか?
事前にご協力いただきありがとうございます。