通过在全局变量中重用标题和其他关键花絮来避免查看重复

时间:2014-02-07 05:24:41

标签: html ruby-on-rails global-variables title interpolation

高度相关的问题,可以帮助我重构和简化我的代码。

第一

我的观点以<% provide(:title, 'My Title') %>

开头

但是在视图的其余部分,在标题或段落中或者没有,“我的标题”重复了很多......有没有办法我可以再次调用它?我尝试过,例如:<h4>:title</h4>无效。

第二

同样在同一视图中,我再说一遍,如果您有兴趣,请与我(带链接)联系。我想用某种符号代替这句话。

最初,我曾考虑使用像这样的全局变量

<p>Yada dada beginning text. <%= @@contactme %> </p>

然后在控制器中显示它(顺便说一句,因为它是全局的,因为多个方法引用相同的视图,它实际上是部分的),但问题是我甚至不确定是否可以声明一个全局变量使用HTML和路由就像这样。

class Controller do
    @@contactme = "If you're interested, please <a href='<%= new_contact_path %>'>please contact me</a>".html_safe
end

即使有可能,它也不适合我。在变量甚至有机会渲染之前我得到:uninitialized class variable @@contactme in ActionView::CompiledTemplates

谢谢!

2 个答案:

答案 0 :(得分:0)

对于第一个,像拉胡尔说的那样,使用yeild。

对于第二种,我不确定在控制器中生成视图是一种很好的行为,并且在这种情况下,您还将面临多层erb渲染(&lt;%tag with another&lt;%tag)(我不是确定它是否有效)

试试这个:

class Controller do
  @contactme = "If you're interested, #{link_to 'please contact me', new_contact_path}"
end

编辑:

new_contact_path只能在视图中使用,而不能在控制器中使用。请尝试使用部分内容。

使用以下内容创建app / views / shared / _contactme.html.erb:

If you're interested, <%= link_to 'please contact me', new_contact_path %>

然后在您的原始观点中

<p>Yada dada beginning text. <%= render 'shared/contactme' %></p>

答案 1 :(得分:0)

<强>首先

application.html.erb

<%= content_for :title %>

posts / index.html.erb#例如

<% content_for :title do %>
  Awesome title
<% end %>

此处提供更多信息:http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#method-i-content_for

<强>第二

class Post
  CONTACTME = "If you're interested, please <a href='/contacts/new'>please contact me</a>".html_safe
end

application.html.erb

<%= Post::CONTACTME %>