任務是檢查聯繫人頁面是否存在並導航到它。對於非英文網站,該方法將查找英文頁面,然後重新啓動以檢查聯繫頁面。什麼是適當的紅寶石方式重做條件?
我的條件的作品很好,但我想有必須是一個更好的方式來做到這一點:
# First, I set the @url variable during Booleans.
# Checks are either to see if a link exists or if a page exists,
# (aka no 404 error).
#
# Here are two examples:
# Boolean, returns true if contact link is present.
def contact_link?
@url = link_with_href('contact')
[email protected]?
end
# True if contact page '../contact' does NOT get a 404 error.
def contact_page?
@url = page.uri.merge('../contact').to_s
begin
true if Mechanize.new.get(@url)
rescue Mechanize::ResponseCodeError
false
end
end
# #
# Now go to the correct page, based off of checks.
#
def go_to_contact_page
1.times do
case # No redo necessary.
when contact_link? # True if hyperlink exists
get(@url)
when contact_page? # False if 404 error
get(@url)
else # Redo is now necessary.
if english_link? # True if hyperlink exists
get(@url)
redo
elsif en_page? # False if 404 error
get(@url)
redo
elsif english_page? # False if 404 error
redo
end
end
end
end
有幾件事情要提醒你注意:
是
1.times do
做單個的最好方法redo
?begin
會更好嗎?瞭解到我在這些檢查的每一項中設置了
@url
變量,在條件分支中似乎有get(@url)
中的冗餘。有更簡潔的方法嗎?我寫了
redo
三次,這似乎也是多餘的。有沒有辦法調用一次,仍然設置@url
變量?
感謝您的幫助!
不知道我完全理解這個問題,但你可以在'case'聲明用逗號結合的情況下(如:'當CONTACT_LINK?contact_page?' )。在if'english_link?'塊之前,您也不需要'else'。這可以在您的案例陳述中加以考慮 –