2013-03-04 8 views
0

Я пытаюсь моделировать ориентированный граф для моего рубин на применении рельсы я две модели, Tag и подключениеРубин на рельсы - Моделирование Ориентированный граф

class Connection < ActiveRecord::Base 
    attr_accessible :cost, :from_id, :to_id 
    belongs_to :from_tag, :foreign_key => "from_id", :class_name => "Tag" 
    belongs_to :to_tag, :foreign_key => "to_id", :class_name => "Tag" 
    end 



class Tag < ActiveRecord::Base 
    attr_accessible :location_info, :reference 
    has_many :to_connections, :foreign_key => 'from_id', :class_name => 'Connection' 
    has_many :to_tags, :through => :to_connections 
    has_many :from_connections, :foreign_key => 'to_id', :class_name => 'Connection' 
    has_many :from_tags, :through => :from_connections 
    end 

Когда я создаю тег как так

a = Tag.create(:reference => "a", :location_info => "Tag A") 
b = Tag.create(:reference => "b", :location_info => "Tag B") 

Он отлично работает.

Но когда я пытаюсь сделать связь между двумя

Connection.create(:from_tag => a, :to_tag => b, :cost => 5) 

Я получаю сообщение об ошибке говорящее

«ActiveModel :: MassAssignmentSecurity :: Ошибка: Не удается массового правопреемником защищенные атрибуты: from_tag и to_tag "

, может ли кто-нибудь увидеть проблему?

+0

проблема, очевидно, ваш attr_accessible список не имея from_tag и to_tag. – nurettin

+0

Я следил за этим http://www.aquabu.com/2007/10/22/directed-graphs-in-ruby-on-rails/ и делал это так, как они это делали – eoghanm

+0

У них не было обеспечения массового назначения в 2007 году – nurettin

ответ

1

Вы не можете назначать отношения друг с другом.

http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html

connection = Connection.new 
connection.from_tag = a 
connection.to_tag = b 
connection.cost = 5 
connection.save 
+0

Я до сих пор не знаю, что менять, чтобы заставить его работать, я новичок в рельсах – eoghanm

+0

То, что я уже сделал – eoghanm

+0

Я обновил свой ответ – Mihai

Смежные вопросы