【问题标题】:Rails, trying to avoid duplicating code (lists of URLs)Rails,尽量避免重复代码(URL 列表)
【发布时间】:2015-04-25 15:50:39
【问题描述】:

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

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/views 文件夹中我有一个文件 parent.html.erb 带代码

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

但我在 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>

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

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

这与我在父方法中的集合相同。那行得通,但是如果我想更改一个链接,我必须在两个地方都更改它。请告知,我对 Rails 很陌生,但意识到这不可能是你应该这样做的方式!谢谢。

我的 routes.rb 很简单

get '/parent', to: 'static_pages#parent'
get '/child',  to: 'static_pages#child'

【问题讨论】:

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


    【解决方案1】:

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

    @collections1 = Collections.find(1)
    

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

    这取决于你如何构思你的模型。

    【讨论】:

      猜你喜欢
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多