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

ran*_*its 6 ruby ruby-on-rails

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

<%= yield :someval %>
Run Code Online (Sandbox Code Playgroud)

其他时候根本没有收益.

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

Geo*_*tte 11

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

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

这是一些伪代码:

_menu.haml

%ul
  %li Home
  %li Users
  %li Roles
  = yield(:menu)
Run Code Online (Sandbox Code Playgroud)

users.haml

- content_for :menu do
  %li Add User
  %li Change permissions
Run Code Online (Sandbox Code Playgroud)

roles.haml

- content_for :menu do
  %li Add Role
Run Code Online (Sandbox Code Playgroud)

相反:

%ul
  %li Home
  %li Users
  %li Roles
  - if current_controller == 'users'
    %li Add User
    %li Change permissions
  - if current_controller == 'roles'
    %li Add Role
Run Code Online (Sandbox Code Playgroud)

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