Rails:在部分模板中调用yield?

时间:2010-07-13 21:15:34

标签: ruby-on-rails ruby

我有时会在部分erb模板中看到这一点:

<%= yield :someval %>

其他时候根本没有收益。

在部分中调用收益率有什么好处?

1 个答案:

答案 0 :(得分:11)

我过去曾经使用它,如果我有一部分可以从不同页面调用,可能需要页面中的某些上下文内容。

我使用的用例是菜单。我有我的库存菜单项,但后来我有yield(:menu),所以用户加载了管理页面,我可以从页面添加菜单项,而不是在部分本身写一个条件语句。

这是一些伪代码:

_menu.haml

%ul
  %li Home
  %li Users
  %li Roles
  = yield(:menu)

users.haml

- content_for :menu do
  %li Add User
  %li Change permissions

roles.haml

- content_for :menu do
  %li Add Role

相反:

%ul
  %li Home
  %li Users
  %li Roles
  - if current_controller == 'users'
    %li Add User
    %li Change permissions
  - if current_controller == 'roles'
    %li Add Role

虽然两者都有功能(如果它是真实的代码),我更喜欢第一种方法。第二个可以失控,并且非常快速地变得非常难看。但这是一个偏好的问题。