سؤال

لدي مشكلة مع الذات المرجعي جمعية النماذج يجب أن تعطي ma مجموعة من نماذج left_chunks و right_chunks الطرق, ولكن يمكنني الحصول في كل مرة صفيف فارغ

المصدر

class Chunk < ActiveRecord::Base
  has_many :left_bindings, :foreign_key => "left_chunk_id",
   :class_name => "ChunkChunk",
   :dependent => :destroy
  has_many :right_chunks, :through => :left_bindings
  has_many :right_bindings, :foreign_key => "right_chunk_id",
   :class_name => "ChunkChunk",
   :dependent => :destroy
  has_many :left_chunks, :through => :right_bindings
end

class ChunkChunk < ActiveRecord::Base
 belongs_to :left_chunk, :class_name => "Chunk", :foreign_key => "left_chunk_id"
 belongs_to :right_chunk, :class_name => "Chunk", :foreign_key => "right_chunk_id"
end

الناتج من ./النصي/وحدة التحكم

>> #first case
?> 
?> left = Chunk.new({:content => "chunk_one"}); left.save
=> true
>> right = Chunk.new({:content => "chunk_two"}); right.save
=> true
>> left.right_chunks << right
=> []
>> left.right_chunks
=> []
>> left.left_chunks
=> []
>> 
?> #second case
?> 
?> left = Chunk.new({:content => "chunk_three"}); left.save
=> true
>> right = Chunk.new({:content => "chunk_four"}); right.save
=> true
>> right.left_chunks << left
=> []
>> right.left_chunks
=> []
>> right.right_chunks
=> []

لماذا قطع لا بد معا ؟

قاعدة البيانات بعد تنفيذ التعليمات البرمجية

mysql> select * from chunks;
+----+-------------+---------------------+---------------------+
| id | content     | created_at          | updated_at          |
+----+-------------+---------------------+---------------------+
|  1 | chunk_one   | 2010-02-14 12:11:22 | 2010-02-14 12:11:22 | 
|  2 | chunk_two   | 2010-02-14 12:11:22 | 2010-02-14 12:11:22 | 
|  3 | chunk_three | 2010-02-14 12:11:22 | 2010-02-14 12:11:22 | 
|  4 | chunk_four  | 2010-02-14 12:11:22 | 2010-02-14 12:11:22 | 
+----+-------------+---------------------+---------------------+

mysql> select * from chunk_chunks;
+----+---------------+----------------+---------------------+---------------------+
| id | left_chunk_id | right_chunk_id | created_at          | updated_at          |
+----+---------------+----------------+---------------------+---------------------+
|  1 |          NULL |              2 | 2010-02-14 12:11:22 | 2010-02-14 12:11:22 | 
|  2 |             3 |           NULL | 2010-02-14 12:11:22 | 2010-02-14 12:11:22 | 
+----+---------------+----------------+---------------------+---------------------+

أي أفكار ؟

هل كانت مفيدة؟

المحلول

لا تقول ما هو إصدار MySQL, روبي أو القضبان كنت على.لقد حاولت هذا مع اختبار صغير التطبيق وانها عملت بشكل صحيح.أنا باستخدام كيو 8.4.1 على OS X 10.6.أنا خلقت فقط فارغة التطبيق على القضبان 2.3.5 / روبي 1.8.7 (2009-06-12 patchlevel 174) مع "القضبان testapp" ، ثم أضاف نموذجين في قطعة.rb:

class Chunk < ActiveRecord::Base
  has_many :left_bindings,  :foreign_key => "left_chunk_id",
                            :class_name => "ChunkChunk",
                            :dependent => :destroy
  has_many :right_chunks,   :through => :left_bindings
  has_many :right_bindings, :foreign_key => "right_chunk_id",
                            :class_name => "ChunkChunk",
                            :dependent => :destroy
  has_many :left_chunks,    :through => :right_bindings
end

و chunk_chunks.rb:

class ChunkChunk < ActiveRecord::Base
 belongs_to :left_chunk,  :class_name => "Chunk", :foreign_key => "left_chunk_id"
 belongs_to :right_chunk, :class_name => "Chunk", :foreign_key => "right_chunk_id"
end

بالإضافة إلى اثنين من الهجرات لإضافة الجداول دون الطوابع الإيجاز:

class AddChunks < ActiveRecord::Migration
  def self.up
    create_table 'chunks' do | t |
      t.string :content
    end
  end

  def self.down
    drop_table 'chunk'
  end
end

و:

class AddChunkChunks < ActiveRecord::Migration
  def self.up
    create_table 'chunk_chunks' do | t |
      t.belongs_to :left_chunk
      t.belongs_to :right_chunk
    end
  end

  def self.down
  end
end

ثم ركض "الخليع db:إنشاء" ، "الخليع db:ترحيل" و الأوامر وحدة التحكم عملت بالنسبة لي على النحو التالي:

PondPro:testapp adh1003$ script/console
Loading development environment (Rails 2.3.5)
>> left = Chunk.new({:content => "chunk_one"}); left.save
=> true
>> right = Chunk.new({:content => "chunk_two"}); right.save
=> true
>> left.right_chunks << right
=> [#<Chunk id: 2, content: "chunk_two">]
>> left.right_chunks
=> [#<Chunk id: 2, content: "chunk_two">]
>> left.left_chunks
=> []
>> left = Chunk.new({:content => "chunk_three"}); left.save
=> true
>> right = Chunk.new({:content => "chunk_four"}); right.save
=> true
>> right.left_chunks << left
=> [#<Chunk id: 3, content: "chunk_three">]
>> right.left_chunks
=> [#<Chunk id: 3, content: "chunk_three">]
>> right.right_chunks
=> []

محتويات قاعدة البيانات بعد المذكورة أعلاه هي:

chunk-devel=# SELECT * FROM chunks;
 id |   content   
----+-------------
  1 | chunk_one
  2 | chunk_two
  3 | chunk_three
  4 | chunk_four
(4 rows)

chunk-devel=# SELECT * FROM chunk_chunks;
 id | left_chunk_id | right_chunk_id 
----+---------------+----------------
  1 |             1 |              2
  2 |             3 |              4
(2 rows)

ونظرا لهذا:

و هذا:

...لا أستطيع أن أرى أي شيء خطأ مع رمز الأصلي.ولعل الهجرات ليست ما كنت أتوقع أنه ربما تكون هناك أجزاء أخرى من التعليمات البرمجية الخاصة بك لديك لم تنشر والتي هي التدخل (على سبيل المثالمرشحات, الأحجار الكريمة الأخرى) أو ربما ActiveRecord قاعدة بيانات محول الخلية لا تفعل الأمور في نصابها الصحيح في هذه الحالة و/أو الخلية ليست المنفذ بشكل صحيح.وهو طويل قليلا ينضب إلى تثبيت كيو و استخدام هذا بدلا من MySQL لمزيد من الاختبارات ، ولكن أعتقد أنه سوف يكون من المفيد.

فقط في حال كان يثبت في كل المفيدة لقد قمت بتحميل تطبيق اختبار البيانات هنا:

إذا كان يمكنك معرفة ما حدث من خطأ و إدارة لتصحيح ذلك, الرجاء نشر المتابعة هنا.هذا وسوف يكون من المفيد إذا كان أي شخص واجه مشكلة مماثلة في المستقبل ويقرأ هذا الموضوع أثناء البحث عن حل.

نصائح أخرى

هل هذه مشكلة .reload؟ بعد القيام بذلك في وحدة التحكم:

وright.left_chunks << left

والقيام

وright.reload

وثم حاول

وright.left_chunks.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top