У меня возникли проблемы с созданием правильного отношения HABTM (has_and_belongs_to_many), в котором требуется пользовательское поведение SQL. Идея состоит в том, чтобы иметь документы, которые могут быть прикреплены к одной службе или нескольким службам, а также к тем же службам, имеющим один или несколько Документов, прикрепленных к ней. Я создал модель «ResourceDocument», в которой содержится отношение, а не более традиционная установка с двумя идентификаторами, потому что там будет больше типов вещей, связанных с документами, таким же образом, что и Сервисы.ruby on rails NameError: неопределенная локальная переменная или метод 'record'
Вот соответствующая часть модели документа:
class Document < ActiveRecord::Base
# ... etc ...
has_and_belongs_to_many :services,
:foreign_key => 'document_id',
:association_foreign_key => 'resource_id',
:join_table => 'resource_documents',
:insert_sql => proc {"insert into resource_documents (document_id, resource_id, type) values (#{id}, #{record.id}, 'Service')"}
# ... etc ...
end
сопровождается соответствующей части спецификации услуг (блок-тест-файл), который звонит в HABTM отношение при выполнении вставки:
require 'spec_helper'
describe Service do
before do
@org = Org.create!(:name => 'org', :asset_code => 'TRNT')
# ... etc ...
end
# ... etc ...
it "should not allow a document belonging to different org" do
new_org = Org.create!({:name => 'another test Org'})
document = FactoryGirl.create(:document, :org => new_org, :services => [@service])
@service.documents << [document]
@service.should_not be_valid
end
end
Когда я запустил rspec
, этот конкретный модульный тест завершился с ошибкой, и в частности линия присвоения документа (FactoryGirl.create) лает и дает сообщение об ошибке, записанное в заголовке. Что я здесь делаю неправильно? Я довольно новичок в рубине, а точнее, всю концепцию выполнения :insert_sql
по отношению к HABTM.
Благодарим за помощь!
Что такое 'record' в' {"insert into values_documents (document_id, resource_id, type) values (# {id}, # {record.id}, 'Service')"} ' – codeit