我有这样的代码,应该可用于每个控制器和所有视图。
@categs1= Category.where({:id => [2,7,15,16] })
@categs2= Category.where(:id => [18,21,24,31,32] )
@categs3= Category.where(:id => [34,35,36,40,42] )
但为了让它可供所有控制器使用,我必须复制它们。我试图放入应用程序控制器,它应该像所有控制器的默认值,但它确实没有用。
我读到了关于使用助手的建议。它是如何工作的 ?喜欢视图中的偏见?我需要创建一个包含此代码的代码,然后在需要的地方编写需要的代码??
谢谢:)
答案 0 :(得分:3)
在名为application_controller
的{{1}}中创建过滤器,并在一个查询中加载所有类别。
load_category
答案 1 :(得分:3)
概念本身是错误的。那就是Wordpress方式。
此类ID是数据,而不是业务逻辑。您的应用应与数据分开。
正确的方法是,假设你有三个重要的类别'foo','bar','barz'你想在app中特别对待,然后在表格中设置这样的东西说添加一个type
字段。
使用rake任务或自己动手将这些id分配给'foo','bar','barz'。
然后在控制器中
foo = Category.where(type: 'foo')
答案 2 :(得分:2)
你应该注意只用他们的ID加载集合...... 无论哪种方式,将该代码放在应用程序控制器中似乎是最好的解决方案。 在应用程序控制器中试试这个:
before_filter :set_categories
private
def set_categories
@categs1= Category.where({:id => [2,7,15,16] })
@categs2= Category.where(:id => [18,21,24,31,32] )
@categs3= Category.where(:id => [34,35,36,40,42] )
end
答案 3 :(得分:1)
我的建议:
Category
中设置一个新字段。 @cars = Category.where(type:'cars')
@bicycles = Category.where(type:'bicycles')
@unicorns = Category.where(type:'unicorns')
因此无论ID有多少,只需要按类型过滤并从视图中调用。