ما هي الطريقة الصحيحة لتحديد علامة مرساة في القضبان؟

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

سؤال

من الواضح من توثيق (و 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") %>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top