rails, rest, render different action with responds to
Maybe my logic is not restful or know if this is how you would do it but this is what I am trying to do.
I'm getting a category inside a category controller and then once I get that category I want to return to an index page in a different controller but keep that @category and the Category.busineses.
Before rest I would have just done this:
render :controller => "businesses"
and it would have rendered the view of the index action in that controller.
now in my respond_to block I have this
format.html {redirect_to(business_path)} # index.html.erb
format.xml { render :xml => @businesses }
but of course with a render it looses the instance variable and starts with a new action.
So what I want to do is render the action instead of 开发者_如何学编程redirecting to that action. is this possible?
Should i just replace the respond_to with render :controller => ?
I think what you are trying to do (if I understand it correctly) would be best achieved using nested resources. If there are businesses separated into categories, and you want to display a listing of all businesses in a specific category, you could set up your application like this:
Models
class Category < ActiveRecord::Base
has_many :businesses
end
class Business < ActiveRecord::Base
belongs_to :category
end
Routes
map.resouces :businesses
map.resources :categories do |categories|
categories.resources :businesses
end
Controller
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
Then simply access the list of a category's businesses like this: /category/1/businesses
I am not 100% clear of what you are trying to do, but you have several options for presentation in a RESTful app.
You can pass a parameters in a redirect. In this case we pass the category id as a parameter in the HTTP GET. The page on the end of the redirect can then handle this appropriately:
format.html {redirect_to( business_path(:category_id => @category.id) }
You can also render the view of a specified action or template. In this case we render the view defined in "{current_controller}/business.html.erb":
format.html { render :action => "business" }
You cann't use redirect_to if you want instance variable as it is use render as follows.
format.html { render :controller=> 'buisness' ,:action => "index" }
OR JUSt
format.html { render :controller=> 'buisness'}
精彩评论