سؤال

لنفترض الطريق

map.resources :articles

وكيف يمكن الحصول على هذا

/articles?most_popular

وباستخدام طريقة link_to؟

وحاول ما يلي:

link_to articles_path(:most_popular) # exception
link_to articles_path(:most_popular => nil) # /articles
link_to articles_path(:most_popular => true) # /articles?most_popular=true

ملاحظة: أنا باستخدام inherited_resources مع has_scope

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

المحلول

إذا كنت لا تضيف قيمة إلى المعلمات التي لن يتم احترام معيار W3C، التي تنص على أن القسم بارامس لديه شكل field=value.

وأوصي بأن تقوم بإضافة الجديد: العمل most_popular إلى وحدة تحكم مقالاتك بدلا

في routes.rb الخاص بك:

map.resources :articles, :collection => {:most_popular=>:get}

في جهاز تحكم:

class ArticlesController < ApplicationController
...
def most_popular
  @articles = ...
end

في وجهات نظركم:

link_to most_popular_articles_path() # /articles/most_popular

وهذا سيكون HTML المتوافقة، عناوين المواقع الخاصة بك وسوف تبدو عمليا نفسه (تغيير واحد؟ تلو الآخر /) وسيتم تبسيط جهاز تحكم (سيكون لديك عمل most_popular فصلها عن رقم قياسي).

والتحيات!

تحديث (2017) : يبدو أن معيار W3C لا تفرض بناء الجملة field=value (أو لا تفرض عليه أي أكثر). ومع ذلك يتم توثيق بعض ملقمات الى "خنق" على استعلامات لا تمتثل لهذا النحو. انظر هل معلمة الاستعلام رابط صحيح إذا كان لديه لا قيمة؟ للحصول على مزيد من التفاصيل.

نصائح أخرى

والمثال الأخير الذي لديك:

link_to articles_path(:most_popular => true) # /articles?most_popular=true

هل الطريقة الصحيحة. وإلا هل يمكن أن مجرد بناء وصلة باليد:

<a href="<%= articles_path %>?most_popular">articles</a>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top