Rails,试图避免重复代码(URL列表)

时间:2015-04-25 15:50:40

标签: ruby-on-rails model-view-controller collections controller

我正在尝试简化和干掉我的rails代码,以免在多个地方复制网址列表,并且必须让它们保持同步。我有一个带有 parent 方法的static_pages控制器,它有不同类别网址列表的实例变量,即

typeof

然后在我的static_pages / views文件夹中,我有一个文件 的 parent.html.erb 代码

class StaticPagesController < ApplicationController
  def parent
    @collection1 = [
      ["Link 1", "http://link1.com"],   
      ["Link 2", "http://link2.com"] 
    ]
    @collection2 = [
      ["Link 3", "http://link3.com"],   
      ["Link 4", "http://link4.com"] 
    ]
  end
end

但我在static_pages中有另一个视图, child.html.erb ,我想只显示集合1

<% @collection1.each do |link| %> 
  <a href="<%= link[1] %>" target = "_blank" class="btn btn-primary btn-block" role="button"><%= link[0] %></a>
<% @collection2.each do |link| %> 
  <a href="<%= link[1] %>" target = "_blank" class="btn btn-primary btn-block" role="button"><%= link[0] %></a>

但是为了做到这一点,我必须在同一个控制器中定义另一个方法:

<% @collection1.each do |link| %> 
  <a href="<%= link[1] %>" target = "_blank" class="btn btn-primary btn-block" role="button"><%= link[0] %></a>

与父方法中的集合相同。这可行,但如果我想改变一个链接,我必须在两个地方改变它。请注意,我对rails很新,但是意识到这不可能是你应该这样做的方式!谢谢。

我的routes.rb很简单

def child
  @collection1 = [
    ["Link 1", "http://link1.com"],   
    ["Link 2", "http://link2.com"] 
  ]
end

1 个答案:

答案 0 :(得分:0)

您可以创建一个可以保存您的URL集合的模型Collections,然后在您的控制器,子项和父项中,调用您检索集合,如:

@collections1 = Collections.find(1)

@collections1 - Collections.where(:collections => 1)

在此之后,您需要了解您的模型。