سؤال

أحاول أن أقوم بإعداد جمعية متعددة إلى العديد من الكائنات. لقد مرت عدة برامج تعليمية وقادرة على إعداد النموذج بشكل صحيح. مشكلتي هي أنني أواجه مشكلة في إعداد الطرق الصحيحة حتى أتمكن من عرض العلاقة الكاملة ... شيء مثل عرض المنتجات فقط من فئة محددة (/ الفئات / 1 / المنتجات /)

هذه هي الطريقة التي وضعتها النموذج:

script/generate scaffold category name:string
script/generate scaffold product name:string
script/generate scaffold categorization category_id:integer product_id:integer

هنا هو المخطط:

ActiveRecord::Schema.define(:version => 20100205210519) do

  create_table "categories", :force => true do |t|
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "categorizations", :force => true do |t|
    t.integer  "category_id"
    t.integer  "product_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "products", :force => true do |t|
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
  end
end

هنا هي الكائنات النموذجية الثلاثة:

class Category < ActiveRecord::Base
    has_many :categorizations
    has_many :products, :through => :categorizations
end

class Product < ActiveRecord::Base
    has_many :categorizations
    has_many :categories, :through => :categorizations
end

class Categorization < ActiveRecord::Base
    belongs_to :product
    belongs_to :category
end

بسيطة جدا ويبدو أن كل شيء يعمل بشكل جيد لأنه يمكنني إضافة منتج إلى فئة من خلال وحدة التحكم:

@category.categorizations << Categorization.new(:product_id => 1)

أنا متأكد من أنني بحاجة إلى تحديث ملف Routes.rb لكنني لا أعرف حقا الطريقة الصحيحة للقيام بذلك. هذا هو ما وضعته في ملف الطرق:

map.resources :categories, :has_many => :products

عندما أحاول عرض المنتجات على فئة "/ فئات / 7 / منتجات /" فقط يسرد جميع المنتجات! هل هذا يعني إعداد طريقي بشكل صحيح وأحتاج فقط إلى كتابة إجراء مخصص على وحدة تحكم المنتجات (بدلا من ذلك ذاهب إلى الفهرس)؟ ماذا أفعل الخطأ هنا ... هل أنا أغلق أو غير طريقه؟!؟

شكرا

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

المحلول

ربما لا تستخدم البيانات من المسار لتصفية قائمة المنتجات الخاصة بك.

في طريقة الفهرس الخاصة بك من product_controller، تحتاج إلى القيام بشيء مثل:

Category.find(params[:category_id]).products

نصائح أخرى

ما تريد القيام به هو استخدام موارد متداخلة. الشكل العام يشبه هذا:

map.resources :users do |users|
  users.resources :posts
end

اقرأ المزيد عن ذلك هنا.

كما اقترح في هذا السؤال, ، يمكنك محاولة إضافة معلمة الطلب: فئة_ID إلى استعلام البحث الخاص بك.

دائما انظر إلى إخراج طرق أشعل النار.

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