ما هي الطريقة الصحيحة لتحديد علامة مرساة في القضبان؟
-
21-09-2019 - |
سؤال
من الواضح من توثيق (و Google) كيفية إنشاء رابط مع شريحة على سبيل المثال podcast/5#comments
. أنت فقط تمرير قيمة ل :anchor
إلى link_to
.
قلقي هو المهمة الأكثر بساطة في توليد <a name="comments">Comments</a>
علامة IE وجهة الرابط الأول.
لقد جربت ما يلي ، وعلى الرغم من أنهم بدا أنهم يعملون ، إلا أن الترميز لم يكن ما توقعته:
link_to "Comments", :name => "comments"
link_to "Comments", :anchor => "comments"
أعتقد أنني أفتقد شيئًا واضحًا. شكرًا.
المحلول
أنت تشعر بالارتباك من السكر النحوي روبي (الذي يستخدمه القضبان بغزارة). اسمحوا لي أن أشرح هذا بإيجاز قبل الإجابة على سؤالك.
عندما تأخذ دالة Ruby معلمة واحدة هي تجزئة:
def foo(options)
#options is a hash with parameters inside
end
يمكنك "نسيان" وضع الأقواس/الأقواس ، وتسميتها هكذا:
foo :param => value, :param2 => value
سوف يملأ روبي الفراغات ويفهم أن ما تحاول إنجازه هو:
foo({:param => value, :param2 => value})
الآن ، على سؤالك: link_to
يأخذ اثنين تجزئة اختيارية - يسمى واحد options
والآخر html_options
. يمكنك أن تتخيل أنه محدد مثل هذا (هذا تقريب ، إنه أكثر تعقيدًا)
def link_to(name, options, html_options)
...
end
الآن ، إذا كنت تستدعيها بهذه الطريقة:
link_to 'Comments', :name => 'Comments'
سيصبح روبي مرتبكًا قليلاً. سيحاول "ملء الفراغات" لك ، ولكن بشكل غير صحيح:
link_to('Comments', {:name => 'Comments'}, {}) # incorrect
سوف تعتقد ذلك name => 'Comments'
الجزء ينتمي إلى الخيارات ، وليس إلى html_options
!
عليك أن تساعد روبي عن طريق ملء الفراغات بنفسك. ضع كل الأقواس في مكانه وسيتصرف كما هو متوقع:
link_to('Comments', {}, {:name => 'Comments'}) # correct
يمكنك بالفعل إزالة المجموعة الأخيرة من الأقواس إذا كنت تريد:
link_to("Comments", {}, :name => "comments") # also correct
من أجل استخدام html_options ، يجب عليك ترك المجموعة الأولى من الأقواس. على سبيل المثال ، ستحتاج إلى القيام بذلك للحصول على رابط مع رسالة تأكيد واسم:
link_to("Comments", {:confirm => 'Sure?'}, :name => "comments")
المساعدون الآخرون في Rails لديهم بناء مماثل (أي form_for
, collection_select
) لذلك يجب أن تتعلم هذه التقنية. في شك ، فقط أضف كل الأقواس.
نصائح أخرى
إذا كنت تريد الذهاب عبر القضبان ، أقترح content_tag
(مستندات).
مثال:
content_tag(:a, 'Comments', :name => 'comments')
<%= link_to('new button', action: 'login' , class: "text-center") %>
أنشأت علامة مرساة لـ Login.html IG
<a href="login.html" class = "text-center"> new button </a>
ولل
<a href="admin/login.html" class = "text-center"> new button </a>
استعمال
<%= link_to('new button', controller: 'admin',
action: 'login' , class: "text-center") %>