2011-02-28 78 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