القضبان - إجراءات مريحة زائدة عن الحاجة لmap.resources؟(جديد، إنشاء)
-
07-07-2019 - |
سؤال
كنت أتساءل لماذا عندما تقوم بإنشاء مسارات مريحة في القضبان باستخدام Map.resources، فإنها تولد إجراءات لها جديد، إنشاء، تحرير، تحديث؟فهل هناك أي خطأ في إعلان إجراء واحد فقط ل يخلق و تحديثوتفعل شيئا من هذا القبيل؟
def create
unless post?
@user = User.new
else
redirect_to :action => 'index' if user.create(params[:user])
end
end
حتى نتمكن من الحصول على شيء من هذا القبيل
:GET users/create # to show the form (same as action - new)
:POST users/create # to create a new user
نظرًا لأن الراحة تعتمد على الأفعال، أليس هذا هو أفضل أسلوب للاستخدام؟
شكرًا لكم على اهتمامكم
المحلول
أعتقد أن هناك مسألتين مرتبطتين ولكن متميزتين هنا:عناوين URL المكشوفة وطرق التحكم التي يتم توجيهها إليها.وبما أنه يمكن تغيير أي منهما بشكل مستقل، فسوف أتناولهما بشكل منفصل.يرجى أيضًا ملاحظة أنني سأتحدث بشكل فضفاض بعض الشيء وبشكل صارم عن REST كما تم تنفيذه في سياق Rails.
فيما يتعلق بعناوين URL الخارجية، أعتقد أنه من المفيد التمييز بين عناوين URL التي تشكل واجهة برمجة التطبيقات (API) للنظام (:GET users/1
, :PUT users/1
, ، وما إلى ذلك) وعناوين URL الموجودة هناك لتسهيل الأمر على البشر الذين يستخدمون متصفح الويب (users/new
, users/5/edit
, ، إلخ).تدور واجهة برمجة التطبيقات (API) حول جلب الموارد أو التفاعل معها بطريقة ما - وهذه هي عناوين URL التي سيستخدمها كمبيوتر آخر عند التفاعل مع نظامك.عادةً ما تكون عناوين URL هذه مجرد عنوان المورد الذي تريد التفاعل معه، ثم تستخدم طريقة HTTP والمعلمات للإشارة إلى ما تريد القيام به (GET = أرني هذا المورد، PUT = تغيير هذا المورد، وما إلى ذلك) ).توجد عناوين URL الملائمة لعرض نموذج لتسهيل استخدام الإنسان لواجهة برمجة التطبيقات.أنت استطاع قم بتحرير مستخدم باستخدام حليقة لكتابة جميع المعلمات التي تريد تغييرها يدويًا وإنشاء مشاركة للمستخدمين/1، ولكن كإنسان يكون الأمر أسهل كثيرًا إذا كان بإمكانك فقط استخدام نموذج.
لننظر إلى الأمثلة الخاصة بك أعلاه، ثم، :GET users/create
قد يكون منطقيًا (وهو مشابه جدًا لـ :GET users/new
وهو الافتراضي)، ولكن :POST users/create
ستترجم تقريبًا إلى "إنشاء مستخدم جديد/إنشاء"، وهو أمر غير منطقي تمامًا.
بقدر ما تذهب أساليب التحكم، فإن "جديد" و"إنشاء" يؤديان مهام مختلفة بشكل أساسي، كما نأمل أن يكون ذلك واضحًا من الفقرات السابقة.أحدهما يعرض نموذجًا، والآخر يقوم بإنشاء مورد جديد.أنت استطاع قم بتحميل نفس الطريقة للقيام بذلك، بالطبع، ولكن بدون سبب مقنع للقيام بذلك، فإن إنشاء طريقتين مستقلتين صغيرتين للتعامل مع مهمتين مستقلتين صغيرتين ربما يكون أسلوبًا أكثر طبيعية.