لقد تغيرت التوجيه namedspaced في القضبان 2.3؟
-
05-07-2019 - |
سؤال
ولدي مساحة الاسم المشرف الذي يعطيني الطرق المعتادة مثل admin_projects وadmin_project، إلا أنهم لا يتصرفون بالطريقة المعتادة. وهذا هو أول مشروع لي القضبان 2،3 بحيث المتعلقة ربما لا أستطيع أن أجد أي معلومات عن طريق جوجل ولكن.
map.namespace(:admin) do |admin|
admin.resources :projects
end
والشيء الغريب هو لURL معين (. على سبيل المثال / المشرف / مشاريع / 1) لا يجب أن تمر في كائن للحصول على URL أنه التخمينات لهم بطريقة أو بأخرى:
<%= admin_project_path %> # => /admin/projects/1
لا تقلق، وليس حقا مشكلة ليس فقط لاحظت هذا من قبل.
ولكن إذا حاولت وتمرير كائن كما هو معتاد:
<%= admin_project_path(@project) %> # => admin_project_url failed to generate from {:controller=>"admin/projects", :action=>"show", :id=>#<Project id: 1, name: "teamc...>
و": معرف" يبدو لاحتواء الكائن بأكمله، لذلك أحاول تمرير معرف مباشرة ويعمل:
<%= admin_project_path(@project.id) %> # => /admin/projects/1
وهذا لن يكون سيئا للغاية ولكن عندما يتعلق الأمر أشكال وعادة ما تستخدم [: المشرف،object]، ولكن:
<%= url_for [:admin, @project.id] %> # => undefined method `admin_fixnum_path'
ولذا لا يمكن أن تمر في الهوية، كما انها تحتاج الى فئة الأشياء للعمل على الطريق الصحيح لاستخدامه.
<%= url_for [:admin, @project] %> # => Unfortunately this yields the same error as passing a object to admin_project_path, which is what it is calling.
وأنا لا يمكن اكتشاف أي أخطاء، وهذا هو المعيار جميلة جدا وأنا لست متأكدا ما يجري خاطئ ...
المحلول
ومثيرة للاهتمام. ماذا يحدث عند تعريف طريقة to_param
على مشروع؟ على سبيل المثال
class Project < ActiveRecord::Base
def to_param
self.id
end
end
وهذا يجب أن يكون الافتراضي وهذا سوفت لا يكون ضروريا. ولكن ماذا يحدث إذا كنت جعلها صريحة؟ حاول إضافة الأسلوب أعلاه ثم تعود إلى النهج الأصلي تمرير فقط حولproject
نصائح أخرى
وأتمنى أن تساعدك على هذه الخطوة. لدينا تطبيق كبير مع عدة أقسام namespaced. وتعرف الطرق لدينا في الطريقة المحددة التي وصفتها ونحن ندعو لدينا مساعد المسار مع الكائنات. لا مكان في تطبيق نحن الوصول باستخدام معرف.
بدأوطلبنا على القضبان 2،1 وانتقلت من خلال 2.2 و 2.3 مع عدم وجود تغييرات كبيرة في التوجيه. عذرا أنا لا يمكن أن يكون مزيد من المساعدة.
والأقران