القضبان - إجراءات مريحة زائدة عن الحاجة لmap.resources؟(جديد، إنشاء)

StackOverflow https://stackoverflow.com/questions/1417463

سؤال

كنت أتساءل لماذا عندما تقوم بإنشاء مسارات مريحة في القضبان باستخدام 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 ستترجم تقريبًا إلى "إنشاء مستخدم جديد/إنشاء"، وهو أمر غير منطقي تمامًا.

بقدر ما تذهب أساليب التحكم، فإن "جديد" و"إنشاء" يؤديان مهام مختلفة بشكل أساسي، كما نأمل أن يكون ذلك واضحًا من الفقرات السابقة.أحدهما يعرض نموذجًا، والآخر يقوم بإنشاء مورد جديد.أنت استطاع قم بتحميل نفس الطريقة للقيام بذلك، بالطبع، ولكن بدون سبب مقنع للقيام بذلك، فإن إنشاء طريقتين مستقلتين صغيرتين للتعامل مع مهمتين مستقلتين صغيرتين ربما يكون أسلوبًا أكثر طبيعية.

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