Dav*_*d C 20 ruby activerecord ruby-on-rails
我有一个部分:
的简档/ _show.html.erb'
包含类似的代码
<%= @profile.fullname %>
Run Code Online (Sandbox Code Playgroud)
我试图渲染部分,但我不知道如何通过@profile.我尝试使用本地但显然它在我的部分而不是'@profile'上设置'profile'.
<%= render :partial => 'profiles/show', :locals => {:profile => @app.profile} %>
Run Code Online (Sandbox Code Playgroud)
无论如何将它作为@object而不是对象传递,或者它是以这种方式设计的?
EmF*_*mFi 34
为什么在部分中使用实例变量(名称以'@'开头的变量,例如:@object)如此重要?进入并不是一个好习惯.在partials中使用实例变量会使控制流变得复杂,这会导致错误并使部分重用变得更加困难.这篇博文更深入地解释了这个问题.
真的你有两个选择.第一个选项是建议的解决方案.
将所有实例变量更改为局部变量,并使用render的locals参数将其传递给partial.
在呈现部分之前设置实例变量.Partials可以访问控制器设置的所有实例变量.
部分中的实例变量也很糟糕.您永远不应该设置实例变量只是因为您的部分已经编写为使用它们.改写部分代替.
Jav*_*diz 14
确实,引用这篇博文你应该知道:
partial是一个可重用的视图模板,它允许您将组成特定页面的组件模块化为逻辑的,有凝聚力的部分.当所需数据未传递给部分数据时,通常很难在以后重复使用或更改.
该导轨导向的网站介绍一些简单的使用案例:
您还可以将局部变量传递给局部变量,使其更加强大和灵活.例如,您可以使用此技术来减少新页面和编辑页面之间的重复,同时仍保留一些不同的内容...
因此,在您的具体情况下,有一种简单而有效的方法可以做到这一点
<%= render partial: 'show', locals: {profile: @profile} %>
Run Code Online (Sandbox Code Playgroud)
额外提示:
可能部分命名的节目不是一个好的选择,给它一个更有意义的名称,与你试图重用的东西相关.当您实际拥有show方法时,这听起来更容易出现错误/混乱,因此可能是_show.html.erb文件和show.html.erb文件.
希望这有帮助.
对于Rails 3+,您实际问题的答案是:
<%= render 'profiles/show', :@profile => blah %>
Run Code Online (Sandbox Code Playgroud)
现在,您的部分对象将@profile
在本地看到。
我并不是说这是一个好方法。老实说,我不确定这是否丑陋。但这有效。
归档时间: |
|
查看次数: |
29181 次 |
最近记录: |