2013-03-04 55 views
1

我是新來的黃瓜,我想問問怎麼幹出這種代碼(不包含錯誤):曬出path.rb

when /^the user page$/ 
    users_path 

when /^the review page$/ 
    reviews_path 

我試圖用正則表達式像

when /^the (.+) page$/ 
    $1.to_s+'s_path' 

但顯然這是錯誤的。提前致謝!

解決方案(基於答案由aledalgrande):

when /^the (.+) page$/ 
send("#{$1}s_path") 

回答

1

這應該工作:

When /^the "(.+)" page$/ do |destination| 
    send("#{destination}s_path") 
end 
+0

它看起來更好,但不幸的是不起作用。感謝您建議「發送」。 – Andrew 2013-03-05 21:18:27

+0

你得到什麼錯誤,馬里奧? – aledalgrande 2013-03-06 11:42:37

+0

在這個版本中,它給出了一個語法錯誤。當我在** |目的地| **之前插入** do **時,我得到了'語法錯誤,意外的關鍵字__do,希望得到keyword_then或','或';'或者當/ ^(。+)頁面$/do | destination |'時爲'\ n'。然後,我將**替換爲**然後**,並得到'語法錯誤,意外的'|''。 玩你的代碼進一步,我通過改變如下工作 '當/ ^的(。+)頁$/ 發送(「#{$ 1} s_path」)' 非常感謝! – Andrew 2013-03-06 15:26:18

1

您可以添加:

功能/支持/ paths.rb

module PathHelpers 
    def path_to(page_name) 
    case page_name 
    when /user/i 
     users_path 
    when /review/i 
     reviews_path 
    when /home/i 
     root_path 
    #add custom here 
    else 
     raise "Can't find mapping from \"#{page_name}\" to a path." 
    end 
    end 
end 

World(PathHelpers) 

,並稱之爲:

when /^the (.+) page$/ do |page| 
    visit path_to(page) 
end 
+0

代碼下面是乾的,但上面沒有這麼幹的。 – Andrew 2013-03-04 15:33:07

+0

你定義了一個助手,並且有一個地方需要改變行爲,添加新的路徑,而不需要在代碼中的其他地方查看。我認爲它是乾的。 DRY不要說寫更少的代碼行,而是編寫一個代碼,您可以輕鬆地在一個地方修改代碼。我用一個詞來更新答案,有一段時間沒有使用黃瓜,但它可能是需要的。 – Kocur4d 2013-03-04 15:39:50

+0

謝謝!我希望你的版本能夠工作,儘管我剛剛添加的解決方案似乎更加簡潔。謝謝你的建議! – Andrew 2013-03-06 16:08:56