2014-02-28 51 views
0

我有一个非常标准的Rails 4应用程序,此时带有许多静态页面(home,about,contact等)以及数据库支持的页面。我想在整个网站的大部分地方都包含html部分,但不包括静态页面(除了主页)。我能得到这个工作,如果我只是陈述一个页面排除,例如关于页面,使用:如果在多个页面中的一个页面上包含html片段(Rails)

<% if !current_page?(about_url) %> 
    include the partial 
<% end %> 

我不知道该怎么写有一个网址列表,即about_url,CONTACT_URL等我尝试了一些沿线:

<% if [about_url, contact_url, ...].!include? current_page 

但也许并不奇怪,它没有工作。

有没有办法在erb自身内部实现这一点,而无需返回控制器? (我想我必须为每个控制器创建阵列)

感谢您的任何帮助。

- 更新 -

我只是想(下面的评论如下):

<% if not [about_url, contact_url].include? request.original_url %> 
    <%= render partial %> 
<% end %> 

它似乎并不喜欢这样。我不确定我的语法是否关闭,或者不能这样做。

+1

尝试request.full_path和/或request.path而不是request.original_url –

+0

request_path做了诡计!但我还需要在我的数组中使用about_path,contact_path而不是about_url等。我将发布完整的解决方案作为答案。感谢您的帮助 – GerryDevine

+0

乐意帮忙:) –

回答

0

你可以去在很多方面这样做,其中之一可以是:

<% if current_page?(controller: 'YOUR_CONTROLLER_NAME') && 
     (current_page?(action: 'about') || current_page?(action: 'contact') || ...) %> 
    include partial 
<% end %> 
+0

嗨Vageesh,我希望避免你制定的详细策略。如果我没有得到任何地方,我会回到这个。谢谢。 – GerryDevine

0

我认为它应该工作,但你的语法是关闭的。

<% if [about_url, contact_url, ...].!include? current_page 

应该

<% if not [about_url, contact_url, ...].include? current_page 

或者如果你喜欢(但我更喜欢“不”,因为它更具可读性)

<% if ![about_url, contact_url, ...].include? current_page 

然而,可读性和可测试性,你或许应该把那个应用程序控制器或助手中的逻辑。

+0

'current_page?'是一个帮助程序,用于检查当前网址是否由给定选项生成。除非用户明确定义,否则我不认为'current_page'函数/助手存在。 –

+0

是的,我刚刚意识到我的错误。 Rails中有没有办法获得当前的URL,也就是说我可以直接与数组中的内容进行比较? – GerryDevine

+0

我刚刚更新了我的语法(请参阅主文章中的更新),但仍无济于事。 – GerryDevine

0

好了,感谢我用它来工作,下面的评论者:

<% if not [about_path, contact_path].include? request.path %> 
    <%= render 'layouts/minibar' %> 
<% end %> 

**要点是使用* _path进行比较的Request的。