سؤال

أنا أستخدم الموارد الموروثة لتجفيف وحدات التحكم الخاصة بي ، ولكن لا يمكنني معرفة كيفية جعل وحدة تحكم معينة تتصرف بشكل صحيح.في نموذج بلدي, User has_one Person.أريد أن يكون متداخلا اختياريا ، وأن يتصرف كمفرد عند التداخل ، وكغير مفرد عندما لا يكون متداخلا.بمعنى آخر ، أريد أن أكون قادرا على سرد جميع الأشخاص المعروفين (/الأشخاص) ، والحصول على الشخص رقم 5 (/الشخص/5) ، والحصول على الشخص الوحيد للمستخدم 10 (/المستخدم/10/شخص).ما يلي في الطرق.الميزانية العادية:

resources :users
  resource :person
end
resources :people

...يضع الطرق كما أتوقع:

         user_person POST   /users/:user_id/person(.:format)                people#create
     new_user_person GET    /users/:user_id/person/new(.:format)            people#new
    edit_user_person GET    /users/:user_id/person/edit(.:format)           people#edit
                     GET    /users/:user_id/person(.:format)                people#show
                     PUT    /users/:user_id/person(.:format)                people#update
                     DELETE /users/:user_id/person(.:format)                people#destroy

              people GET    /people(.:format)                               people#index
                     POST   /people(.:format)                               people#create
          new_person GET    /people/new(.:format)                           people#new
         edit_person GET    /people/:id/edit(.:format)                      people#edit
              person GET    /people/:id(.:format)                           people#show
                     PUT    /people/:id(.:format)                           people#update
                     DELETE /people/:id(.:format)                           people#destroy

...عظيم جدا.الآن ، إذا كان في بوبليكونترولر ، وأنا استخدم:

belongs_to :user, :optional => true

...ثم تعمل عناوين ورل غير المتداخلة / الأشخاص ، ولكن عناوين ورل المتداخلة /المستخدمون/:معرف المستخدم/الشخص لا: undefined method 'people' إذا ، بدلا من ذلك ، في بوبليكونترولر ، وأنا استخدم:

belongs_to :user, :optional => true, :singleton => true

...ثم تعمل عناوين ورل المتداخلة /المستخدمون/:معرف المستخدم/الشخص ، ولكن عناوين ورل غير المتداخلة / الأشخاص لا يتم التعامل معها على أنها مفردة ، حتى عندما تكون غير متداخلة: undefined method 'person'

موجز:هل هناك طريقة لجعل الموارد الموروثة تتعامل مع مورد كمفرد عند الوصول إليه عبر مسار متداخل, ولكن كغير مفرد عند الوصول إليه عبر مسار غير متداخل?

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

المحلول

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

نصائح أخرى

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