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 从父数据中获取数据并在嵌套视图中显示为页面标题(标题)的主要内容,如果未能解决你的问题,请参考以下文章