3 回答
TA贡献2037条经验 获得超6个赞
简短的答案是render方法查看您传入的第一个参数。如果传入哈希(包括:partial => 'foo', :locals => {blah blah blah}
),则它将传入所有参数作为哈希并相应地解析它们。
如果您将字符串作为第一个参数传递,则它将假定第一个参数是您的部分名称,并将其余部分作为本地变量传递。但是,在随后的调用中,它实际上是分配的:locals => your_locals_argument
,在这种情况下,它是整个:locals => {locals hash}
,而不是{locals hash}
;。即你最终:locals => {:locals => {locals hash}}
而不是:locals => {locals hash}
。
因此,我的建议是始终始终以相同的方式显式地传递值,这样就不会有问题。为了了解这一点,我直接去代码本身(ActionPack的/ LIB / base.rb,render()
方法在轨道2; 3的Rails不同)。这是一个很好的锻炼。
此外,不必担心在SO上“让人”生硬。这就是为什么该网站存在。我什至从中学到了一些东西。
TA贡献1803条经验 获得超3个赞
如果需要指定:locals,则需要指定:partial或:template
<%= render :partial => "rabbits/form", :locals => {...} %>
应该管用
TA贡献1786条经验 获得超11个赞
坦率地说,我只知道这些用例,因为过去两年来我一直在跟上Rails,并阅读了有关添加了新方法的公告。我通常会自己犯一个错误,但通常很容易纠正。
如果您问我,这是尚未完全考虑过的Rails API的那些部分之一。这些年来,它只是积累了越来越多的语法糖,而没有贬低任何旧行为。渲染方法患有糖尿病。
更糟糕的是,渲染在控制器和视图中的行为有所不同。我还将查看第一个参数的内容,以查看它是文件,模板,操作还是部分文件。如果以斜杠开头,则为文件或类似名称。
我赞成尽可能使用较短的符号。因为简短的符号确实很好地传达了意图。阅读时,它通常会执行您认为的操作。写作并不是那么简单。
- 3 回答
- 0 关注
- 738 浏览
添加回答
举报