سؤال

ها هي مخططي

class Menu < ActiveRecord::Base
  belongs_to :menuable, :polymorphic => true
end

class Page < ActiveRecord::Base
  has_one :menu, :as => :menuable
end

class Links < ActiveRecord::Base
  has_one :menu, :as => :menuable
end

أريد الارتباط بصف متعدد الأشكال في عرض القائمة باستخدام link_to، على سبيل المثال

<%= link_to menu.name, menu.menuable %>

هذا يعمل، ولكن هذا يسترجع الكائن الداخلي من قاعدة البيانات، عندما يكون كل ما أردت هو توليد رابط. يمكنك تخيل ما إذا كانت قوتي كبيرة، فسيحتوي ذلك على تطبيقي حقا.

عندما سجلت الحقل القابل للتنظيم كأمر قطاعي، أنشأ القضبان Rails Rail_Type و Locureable_ID. ما الذي يمكنني استخدامه لإنشاء رابط للصفحة متعددة الأعمدة، وقصر كتابة وظيفة مساعد مع عبارة تبديل عملاقة (على سبيل المثال إذا كان لدي عدد كبير من الفئات الفرعية "؟)

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

المحلول

لقد مضى وقت طويل منذ طرح السؤال ولكن كان لدي نفس المشكلة مؤخرا وكان الحل استخدام polymorphic_url. وبعد تحتاج إلى العثور على اسم الطريق الذي تحتاجه لإنشاء رابط إليه، على سبيل المثال "fast_car_path" واجعله خارج * _type و * _id من الجدول متعدد الأشكال. على سبيل المثال، لديك قائمة بالتعليقات وترغب في تحقيق الرابط إلى السيارات التي ينتمون إليها. لذلك إذا * _type = fastcar لدينا

@comments.each do |comment|
  link_to polymorphic_url(comment.commentable_type.tableize.singularize, :id => comment.commentable_id) 

والتي ستولد "fast_car_path" دون تنزيل السيارات من قاعدة البيانات.

أنا مستجد في القضبان ولا أعرف مدى جودة هذه النصيحة، ولكن آمل أن تكون مفيدة لشخص ما.

نصائح أخرى

يمكنك أن تفعل شيئا مثل هذا:

def my_menu_url(menu)
  "/#{menu.menuable_type.tableize}/#{menu.menuable_id}"
end

إذا كنت تستخدم اتفاقية القضبان لتسمية وحدات التحكم التي المراسل مع النماذج الخاصة بك.

ولكن لا تفعل ذلك. أنت تعمل حول آلية التوجيه من القضبان وهذا بمجرد ممارسة سيئة.

يجب عليك استخدام الخيار: قم بتضمينه في الباحثين عن تحميل الحمل الخاص بك

Menu.all :include => :menuable

في الحالة، لا يكفي ذلك، قد تستخدم نوعا من التخزين المؤقت.

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