轨道,休息,呈现不同的动作与响应

时间:2010-04-17 03:30:41

标签: ruby-on-rails rest

也许我的逻辑不是很安静,或者知道你是怎么做的,但这就是我想做的事。

我在类别控制器中获得一个类别,然后一旦我得到该类别,我想返回到不同控制器中的索引页面,但保留@category和Category.busineses。

休息之前我会这样做:

渲染:controller => “企业”

它会在该控制器中呈现索引操作的视图。

现在在我的respond_to块我有这个

   format.html {redirect_to(business_path)} # index.html.erb
   format.xml  { render :xml => @businesses }

但当然使用渲染它会丢失实例变量并以新操作开始。

所以我想做的是渲染动作而不是重定向到该动作。 这有可能吗?

我应该用render替换respond_to:controller => ?

3 个答案:

答案 0 :(得分:2)

我认为您尝试做的事情(如果我理解正确的话)最好使用嵌套资源来实现。如果将业务分为多个类别,并且您希望显示特定类别中所有业务的列表,则可以按以下方式设置应用程序:

<强>模型

class Category < ActiveRecord::Base
  has_many :businesses
end

class Business < ActiveRecord::Base
  belongs_to :category
end

<强>路线

map.resouces :businesses

map.resources :categories do |categories|
  categories.resources :businesses
end

<强>控制器

class BusinessesController < ApplicationController
  def index
    @category = Category.find(params[:category_id]) if params[:category_id]
    conds = params[:category_id] ? { :category_id => params[:category_id] } : nil
    @businesses = Business.all(:conditions => conds)
  end
end

然后只需访问类别的商家列表,如下所示:/category/1/businesses

答案 1 :(得分:1)

我不是100%清楚你想要做什么,但你有几个选项可以在RESTful应用程序中进行演示。

您可以在重定向中传递参数。在这种情况下,我们将类别ID作为HTTP GET中的参数传递。然后,重定向末尾的页面可以适当地处理:

format.html {redirect_to( business_path(:category_id => @category.id) }

您还可以呈现指定操作或模板的视图。在这种情况下,我们渲染“{current_controller} /business.html.erb”中定义的视图:

format.html { render :action => "business" }

答案 2 :(得分:1)

如果您想要实例变量,则不能使用redirect_to,因为它使用渲染,如下所示。

format.html { render :controller=> 'buisness'  ,:action => "index" }

OR JUSt

format.html { render :controller=> 'buisness'}