【发布时间】: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