无法使用 Rails 上的自定义布局访问视图上的实例变量

Posted

技术标签:

【中文标题】无法使用 Rails 上的自定义布局访问视图上的实例变量【英文标题】:Cannot access instance variable on view using custom layout on Rails 【发布时间】:2019-08-23 19:22:16 【问题描述】:

我有一个带有自定义布局的控制器方法,我无法访问相应视图上的实例变量。

当我改回默认应用程序布局时。我可以访问实例变量。

pages_controller.rb

def payment_summary
    render layout: "content"
    if session[:new_company_id].present?
      @company = Company.find(session[:new_company_id])
    end
    @var = "this is test"
  end

payment_summary.html.erb

  <div class="row">
    <div class="col-sm">
      Company Info
      <div class="card">
        <%= @company.name %>
        <%= @var %>
      </div>
    </div>
    <div class="col-sm">
      Due Today
    </div>
  </div>

布局/content.html.erb

<!DOCTYPE html>
<html>
  <head>
   
    <%= csrf_meta_tags %>
    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
    <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
    <!-- Font Awesome 5 Free -->
    <script src="https://kit.fontawesome.com/9da10782cc.js"></script>
    <!-- for js cookie use -->
    <script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>

  </head>

  <body class="content-pages <%= body_class %>">
    <%= yield %>
  </body>
</html>

当我删除时,渲染布局内容一切正常。

【问题讨论】:

【参考方案1】:

render 在这种情况下是“订单相关”。将其向下移动,作为动作主体中的最后一条语句:

def payment_summary
  if session[:new_company_id].present?
    @company = Company.find(session[:new_company_id])
  end
  @var = "this is test"
  render layout: "content"
end

【讨论】:

以上是关于无法使用 Rails 上的自定义布局访问视图上的实例变量的主要内容,如果未能解决你的问题,请参考以下文章

相对布局中的自定义视图问题

如何以编程方式在 UITableViewCell 中添加自定义视图?

菜单栏应用程序的自定义视图上的 mouseDown 问题

自定义布局上的Onlayout方法扩展LinearLayout

根据活动(Android)更改自定义适配器上的布局文件

剑道树视图Angularjs上的自定义按钮