在我的应用程序中,我有一组实体。现在我想在我的起始页面上构建一个调用控制器a的动作的搜索表单。如果它找到多个权利,它将显示所有产品,如果它只找到一个产品,它应该重定向到另一个控制器,该控制器加载有关该实体的详细信息并显示它。在我的第一个控制器中,我通过调用
来完成此操作if @entities.length==1
redirect_to show_path(:id=>@entities[0].id)
end
我希望现在新的网站像/ show?id = 1234一样打开,但这种情况不会发生。相反,实体路径后面的控制器加载实体的详细信息,但没有显示任何内容。
我收到以下错误:
ActionView::MissingTemplate (Missing template entities/show with {:formats=>[:js, :"*/*"], :handlers=>[:rjs, :rhtml, :rxml, :erb, :builder], :locale=>[:en, :en]} in view paths ..."):
如何加载正确的页面,只需将show.js.erb添加到entities文件夹即可使错误消失,但问题仍然是显示页面未显示。
编辑:
render :update do |page|
page.redirect_to show_product_path(:id=>@entities[0].id)
end
这有效但为什么?有什么区别?
答案 0 :(得分:1)
我建议直接重定向到对象。 Rails非常聪明,可以为您的对象创建路径。
if @entities.length==1
redirect_to @entities.first
end
答案 1 :(得分:0)
我想知道
render :update do |page|
page.redirect_to show_product_path(:id=>@entities[0].id)
end
代码正在同一控制器中查找show动作,其中
render :update do |page|
page.redirect_to show_product_path(:id=>@entities[0].id)
end
正在重定向到产品控制器中的产品/展示。我认为你在“实体”控制器中没有“显示”动作,这就是为什么你会得到
ActionView::MissingTemplate (Missing template entities/show with {:formats=>[:js, :"*/*"], :handlers=>[:rjs, :rhtml, :rxml, :erb, :builder], :locale=>[:en, :en]} in view paths ..."):
使用默认的rails配置,其工作方式如下
控制器中的
class EntitiesController < ApplicationController
def index
#will display all the products
**#you need to have a index.erb.html file as well**
@products = <Your product getting logic here>
end
def show
#display only one product
#you need to have a show.erb.html
@product = Product.find(params[:id])
end
end
所以在你的情况下你应该重定向为
带有ID的 show_product_path
并确保在控制器中定义了show action
HTH
sameera