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

Posted

技术标签:

【中文标题】Rails 从父数据中获取数据并在嵌套视图中显示为页面标题(标题)【英文标题】:Rails Get Data from Parent Data and Show in Nested View as a Page Tittle (heading) 【发布时间】:2015-11-03 23:14:10 【问题描述】:

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

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 %>

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

除非membercontact_id 在特定会话中始终相同(例如:如果membercontact_id 将是current_user.id)- 是这样吗?

但是,您的Backend::Membercontact 类中可能有一个实例方法,它将返回full name,如下所示:

def full_name
  mcfirstname + " " + mclastname
end

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

此外,如果您的所有视图都将具有相同的标题:Private Address Information...,那么您也可以从模型内部返回它,也许会得到类似的东西:

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

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

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

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

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

希望这会有所帮助...

【讨论】:

感谢您的回答。我喜欢您的解决方案,但在这种情况下,成员与会话或任何内容无关。

以上是关于Rails 从父数据中获取数据并在嵌套视图中显示为页面标题(标题)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 linq 从父类和嵌套数组子类中获取值?

如何从核心数据中获取数据并在表格视图中显示 iOS 6

Rails:在嵌套视图中订购商品

从数据库中获取照片并在列表视图中显示

如何在滚动视图中显示从 Web 获取的 NSArray 数据并在 Objective C 中扩展+更新它?

从 DialogFragement 获取数据,将其放入 SQLiteDB 并在回收器视图中显示所有结果