2011-02-28 77 views
0

嘿傢伙 我是新來的鐵軌。我做了這個小測試代碼的學習軌道幫手:我找不出幫手Rails

應用程序/傭工/ home_helper.rb

module HomeHelper 
    def show(var) 
    yield var 
    end 
end 

應用程序/視圖/家庭/ index.html.rb

<%= show('hello world')%> 

當我導航到網址localhost:3000/home/index我在HTML源代碼中沒有任何東西 我做錯了什麼?

回答

2

有幾件事情,這裏要注意:

module HomeHelper 
    def show(var) 
    yield var 
    end 
end 

首先你使用yield將通過控制給予該方法的塊。然而,你再調用該方法不使用塊:

<%= show('hello world') %> 

,如果您有它看起來會是這樣的一個塊:

<%= show('hello world') do |v| %> 
    <%= v %> 
<% end %> 

這將有輸出的「Hello World」爲你預期。

最喜歡你的意思是:

module HomeHelper 
    def show(var) 
    var 
    end 
end 

這將返回正在傳遞的值,將其輸出到響應流。

雖然塊助手通常可以用來乾燥你的代碼,大多數時候你想要一個partial with a layout

+0

感謝您的回答。我做錯了的部分是<%= show('hello world'){| v | print v}%>我不應該在這裏調用打印方法,因爲在erb中,<%= %>打印出瀏覽器中的值 – mko 2011-03-01 02:56:50

1

你爲什麼要做產量?去簡單的回報:

def show(var) 
    var 
end 
1

刪除yieldyield是用於塊 - 你的意思是return? (這是可選的)。

+0

謝謝你讓我知道返回是可選的。 – mko 2011-03-01 02:50:47

1

另一個(可以說更好)選項是設置控制器中的顯示文本。

home_controller.rb

HomeController < ActionController 

    # Other controller code... 

    def index 
    @text = "Hello, world!" 
    end 

end 

index.html.erb

<%= @text %> 
+0

我工作,但現在我想練習學習幫手。謝謝 – mko 2011-03-01 02:50:08