@RequestMapping(value = "/url", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE})
我的文章模型中的实例变量用于标题的下拉列表。
application.html.erb
<html>
.
.
.
<body>
<%= render 'layouts/header' %>
<div class="container">
<%= yield %>
</div>
</body>
.
.
.
</html>
我是否必须在每个视图中包含@articles = Articles.all,例如:
_header.html.erb
.
.
<li class="dropdown">
.
.
<%= link_to(@articles.first.source, target: "_blank") do %>
.
.
</li>
.
.
还是有更好的方法?
答案 0 :(得分:2)
这样做:
class PhotosController < ApplicationController
before_action :set_articles
def index
end
def new
end
def show
end
private
def set_articles
@articles = Article.approved.all
end
end
这将在您执行所有操作之前设置 @articles ,因此您不需要重复自己。
答案 1 :(得分:2)
实例变量在类范围内使用。因此您不需要这样做,因为变量在您的控制器类中可用,但是如果您希望它用所有文章填充它,那么您可以将它分成可以在每个方法中调用的函数。更好的想法是使用回调来调用新函数
编辑:感谢@Ed de Almeida他为你做了。
答案 2 :(得分:2)
如果我正确理解了问题,您希望网址的每个页面上的下拉菜单中都显示网址来源。它始终是相同的网址吗?如果是这样,您可以将其定义为常量。您可以使用几种宝石来设置安全的全局变量,例如dotenv和figaro。或者您可以在不同的config / environments / files中定义它 - production.rb和development.rb
config.foo = 'bar'
然后您可以使用
访问它Rails.application.config.foo
如果它们不是常量,则可以在应用程序控制器中设置before_action。
class ApplicationController < ActionController::Base
before_action :set_dropdown_articles
def set_dropdown_articles
@dropdown_articles = Article.approved.all
end
end