Rails 从 Parent 数据中获取数据并在嵌套视图中显示为页面标题(标题)

Rails Get Data from Parent Data and Show in Nested View as a Page Tittle (heading)

我正在尝试让成员的名字和姓氏显示为所有嵌套地址视图中的标题。到目前为止,我想出了这个(只是为了索引),这可能不是 "rails way" 但这是我现在想出来的唯一方法。

def index
    @membercontact = Backend::Membercontact.find(params[:membercontact_id])
    membercontact = Backend::Membercontact.find(params[:membercontact_id])
    @memberaddresses = membercontact.memberaddresses.order('mafullname ASC')
end

我真正关注的台词是:

<h2>Private Address Information - <%= @membercontact.mcfirstname + ' ' + @membercontact.mclastname %></h2>

每个视图的顶部都有这个(我知道不是很干)但现在只是为了学习。但这就是上面一行在视图中的样子。

<!-- Bread Crumbs -->
<div class="row wrapper border-bottom white-bg page-heading">
    <div class="col-lg-10">
    <h2>Private Address Information - <%= @membercontact.mcfirstname + ' ' + @membercontact.mclastname %></h2>
        <ol class="breadcrumb">
            <li> 
                <a>Home</a>
            </li>
            <li>
                <%= link_to main_app.backend_membercontacts_path, class: "nav-link" do %>
                    Members List
                <% end %>
            </li>
            <li class="active">
        <%= link_to main_app.backend_membercontact_memberaddresses_path, class: "nav-link" do %>
                    Private Address List
                <% end %>
            </li>
        </ol>
    </div>
    <div class="col-lg-2">
    </div>
</div>

我是否必须将下面的行添加到每个控制器操作中?或者我有更好的方法可以解决这个问题。

@membercontact = Backend::Membercontact.find(params[:membercontact_id])

我也看到过类似的问题,但我认为你必须在 for each 之间调用数据

<% @memberaddresses.each do |memberaddress| %>
<% end %>

如果您想要 @membercontact 在每个控制器的每个操作中可用,您可以在 application_controller.rb 中的方法中定义它,并在 运行 之前使用该方法使用 before_action 指令的每个动作。

我认为您可能必须在每个控制器中调用@membercontact 行:

@membercontact = Backend::Membercontact.find(params[:membercontact_id])

除非 membercontact_id 对于特定的 session 总是相同的(例如:如果 membercontact_id 将是 current_user.id) - 是这样吗?

但是,您的 Backend::Membercontact class 中可能有一个实例方法,它将 returning full name 如下:

def full_name
  mcfirstname + " " + mclastname
end

然后从视图内部调用 @membercontact 上的 full_name 方法。

此外,如果您的所有视图都具有相同的 header:Private Address Information...,您不妨也从模型内部 return 获取它,或许可以得到一些东西喜欢:

def page_title
  "Private Address Information - " + mcfirstname + " " + mclastname
end

最后一个是如果 member 在所有控制器中保持不变(例如,如果成员是当前用户),那么您可以拥有服务 class 到 return:

def self.page_title
  "Private Address Information - " + current_user.mcfirstname + " " + current_user.mclastname
end

然后从每个控制器,@page_title = MyServiceClass.page_title 并从您的视图中调用以下内容:

<h2><%= @page_title %></h2>

希望这对您有所帮助...