Rails渲染布局传递局部变量报错,求正确实现方式
给Rails布局传递局部变量的正确方法
方法1:直接给布局传递局部变量
在控制器的render方法中,通过哈希形式指定布局模板并传递locals,让布局能直接访问局部变量:
def registrations_for_user render layout: { template: 'remote_modal', locals: { modal_title: '用户注册' } } end
布局模板remote_modal.html.erb中直接使用变量:
<div class="modal-header"> <h5 class="modal-title"><%= modal_title %></h5> </div>
方法2:使用content_for传递内容块
这种方式无需传递变量,而是在视图中定义内容块,布局里通过yield获取,更适合传递带格式的HTML内容:
在视图模板(如registrations_for_user.html.erb)中:
<% content_for :modal_title do %> <span class="text-primary">用户注册</span> <% end %>
在布局模板remote_modal.html.erb中:
<div class="modal-header"> <h5 class="modal-title"><%= yield :modal_title %></h5> </div>
为什么之前的做法报错?
局部变量的作用域仅限于当前模板,你传给视图的modal_title不会自动传递给布局文件。布局拥有独立的作用域,因此直接调用未传递的变量会触发NameError。
内容的提问来源于stack exchange,提问作者David Geismar
相关产品推荐
相关产品推荐

