2010-04-17 49 views
0

也許我的邏輯是不是寧靜或不知道如果這是你會怎麼做,但是這是我想要做的事。軌,休息,渲染響應不同的動作來

我得到一個類別控制器內的一個類別,然後,一旦我得到這一類我想返回到索引頁面在不同的控制器,但保持這種@Category和Category.busineses。

休息之前,我就剛剛做這個:

渲染:控制器=>「企業」

,它將會呈現在控制器中的索引動作的視圖。

現在在我的respond_to塊我有這個

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

但具有使其失去實例變量,並用新的行動開始課程。

所以我想要做的就是渲染操作而不是重定向到該動作。 這可能嗎?

我應該只是更換渲染的respond_to:控制器=>?

+1

山姆,你的意思是'渲染:行動=>「富」'?你的解釋很混亂。 – 2010-04-17 03:45:40

+0

+1令人困惑的問題...:P – 2010-04-17 03:48:50

+0

我很抱歉讓人困惑的部分,但休息對我來說是一個全新的範例,我不知道從哪裏開始 – s84 2010-04-17 04:13:13

回答

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

+0

那麼如果我只是想通過完整的企業清單而不是按類別來獲得索引操作,那麼怎麼辦?檢查參數[:category_id]? – s84 2010-04-17 04:07:40

+1

@Sam - 查看我編輯的例子,瞭解如何爲'/ business'和'/ category/1/business'使用相同的動作。 – 2010-04-17 04:23:40

+0

非常感謝。順便說一句 - 你認爲在軌道上學習的最佳資源是什麼? – s84 2010-04-17 04:26:12

1

我不是100%清楚的你正在嘗試做的,但你必須在一個RESTful應用呈現幾個選項。

您可以重定向傳遞參數。在這種情況下,我們將類別標識作爲HTTP GET中的參數傳遞。然後重定向結束的頁面可以適當地處理這個問題:

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

您也可以使指定的動作或模板的視圖。在這種情況下,我們渲染「{} current_controller /business.html.erb」中定義的視圖:

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

我對於我想要的東西也不是很清楚。 – s84 2010-04-17 03:49:07

+0

format.html {render:action =>「index」}是我正在尋找的 – s84 2010-04-17 03:49:32

1

,如果你想實例變量,因爲它是用如下方式呈現您水溼使用redirect_to的。

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

或只是

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

謝謝,這正是我一直在尋找的。我認爲你剛剛在託比之後回答,否則我會給你支票而不是投票 – s84 2010-04-17 03:50:33

+1

沒關係山姆。但請記住format.html {render:action =>「business」} 在Toby的答案中必須是format.html {render:controller =>「business」},否則它會在類別/ buisness.html中查找頁面。 ERB。我知道這只是打字錯誤,或者可能很匆忙,但請看看它。其他很好。 – Salil 2010-04-17 03:54:09