我有一个带3个控制器的rails应用程序:
categories
,subcategories
,all
这两个第一次从数据库中获取数据并通过
进行渲染render "list"
最后一个应该得到第一个控制器的结果,第二个控制器的结果并渲染它们。
简化示例:
# categories_controller.rb
class CategoriesController < ApplicationController
def index
render "list"
end
end
# subcategories_controller.rb
class SubcategoriesController < ApplicationController
def index
render "list"
end
end
# all_controller.rb
class AllController < ApplicationController
def index
# should render the both and join them
end
end
# list.html.erb
this is the list
结果:
/category
=> "this is the list "
/subcategory
=> "this is the list "
/all
=> "this is the list this is the list "
我试着打电话
render "subcategory"
render "subcategory/index"
但似乎没有任何效果。
你有什么想法吗?
谢谢,
以前的方法如下:
# categories_controller.rb
class CategoriesController < ApplicationController
def self.getAll
return Category.all
end
def index
@data = CategoriesController.getAll
# some logic here
render "list"
end
end
# subcategories_controller.rb
class SubcategoriesController < ApplicationController
def self.getAll
return Category.all
end
def index
@data = SubcategoriesController.getAll
# some logic here
render "list"
end
end
# all_controller.rb
class AllController < ApplicationController
def index
@categoriesData = CategoriesController.getAll
@subcategoriesData = SubcategoriesController.getAll
render 'all'
end
end
# list.html.erb
<%= @data %>
# all.html.erb
<%= @categoriesData %>
<%= @subcategoriesData %>
但是我必须重写已经存在的逻辑的一部分......
答案 0 :(得分:3)
您需要在all
控制器操作中显式构建所需的输出,而不是尝试加入其他操作的输出。
两种方法:
通过两次数据库调用检索所需的项目,将它们连接成一组大的列表项,然后像在其他操作中一样呈现列表。
class AllController < ApplicationController
def index
categories = Categories.all
sub_categories = Subcategories.all
@all = categories + sub_categories
end
end
检索这两组数据,将list.html
页面调用部分称为_sub_list.html
或其他内容,然后为名为{{1}的all
页面设置新模板},为每组数据渲染两次新的部分。
all.html
跨控制器重用逻辑。使用一个问题:
class AllController < ApplicationController
def index
@categories = Categories.all
@sub_categories = Subcategories.all
end
end