重定向到rails中的另一个页面

时间:2011-05-09 16:06:50

标签: javascript ruby-on-rails ajax redirect

在我的应用程序中,我有一组实体。现在我想在我的起始页面上构建一个调用控制器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

这有效但为什么?有什么区别?

2 个答案:

答案 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