Rails - 在控制器中,如何从不同的控制器渲染动作?

时间:2015-01-31 09:38:08

标签: ruby-on-rails ruby ajax

我有一个页面,其中显示有关相应汽车的信息(它是控制器cars,操作show)。在此页面上,我从名为_form的控制器中呈现reviews

当我发送表单(通过AJAX)时,审核已成功创建,但我无法从reviews控制器呈现来自cars控制器的任何操作 - 更具体,这是代码:

# reviews_controller
  def create
    @review = Review.new(review_params)
    @review.save
    #respond_with(@review)
    respond_to do |format|
      format.js { render :action => "/cars/car_profile" }
    end
  end

我得到的错误:

ActionView::MissingTemplate (Missing template reviews/cars/car_profile, application/cars/car_profile with {:locale=>[:en], :formats=>[:js, :html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :haml, :jbuilder]}. Searched in:
  * "/Users/adam/rubydev/claisy/app/views"
  * "/Users/adam/.rvm/gems/ruby-2.0.0-p481/gems/devise-3.4.1/app/views"
):
  app/controllers/reviews_controller.rb:28:in `block (2 levels) in create'
  app/controllers/reviews_controller.rb:27:in `create'

如何在控制器中呈现位于不同控制器中的操作?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

:action强制rails在当前控制器视图文件夹中搜索模板。

  

缺少模板评论/ cars / car_profile

你应该写这个

render "cars/car_profile"

请参阅point 2.2.3

  

如果要从完全不同的模板渲染模板,该怎么办?   控制器来自包含动作代码的控制器?你也可以   使用render,它接受完整路径(相对于app / views)   要渲染的模板。