القضبان: Specifing بارامس دون قيمة لLINK_TO
-
08-07-2019 - |
سؤال
لنفترض الطريق
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>