正确的模板不会渲染Ruby on Rails 4

时间:2014-06-12 21:07:15

标签: ruby-on-rails templates controller

我正在使用太阳黑子solr来搜索我的Ruby on Rails应用程序。我创建了一个新的搜索路径,控制器并提取我想要搜索的工具模型和库存模型。

但是,我找不到将搜索控制器渲染回root_path和/或root_url的方法。我尝试了很多不同的组合,并检查了这篇文章:

http://guides.rubyonrails.org/layouts_and_rendering.html

现在搜索控制器如下:

class SearchesController < ApplicationController

  def index
    @tools = Tool.search do
      keywords params[:query]
    end.results

    @inventories = Inventory.search do
      keywords params[:query]
    end.results

    format.html { render template: "home" }
  end

end

渲染模板:“home”无效。如果有人知道如何将其重定向到有用的根路径。

错误信息是:

SearchesController #index中的ArgumentError 论点太少了。

3 个答案:

答案 0 :(得分:1)

format本地变量未在index操作中定义,导致错误ArgumentError in SearchesController#index too few arguments.

您需要做的是,在format.html方法调用中附上respond_to

respond_to do |format| ## format is defined here
  format.html { render template: "home" }
end 

或者,当您以html格式呈现视图时,可以直接使用

render template: "home"  ## Removed format.html {}

此外,在从另一个控制器渲染Action的模板时使用template选项,即

如果您在位于SearchesController目录中的app/controllers中运行代码,则可以将操作home的结果呈现给app/views/welcome中的模板,如下所示:

render template: "welcome/home"

重点是你要么

在错误的上下文中使用template选项,即如果home本身存在SearchesController操作,则您应该执行

render action: "home"

-OR-

you just forgot to add the view path in front of主页,即如果home操作属于WelcomeControllerhome视图位于app/views/home下,那么您应该指定

render template: "welcome/home"

答案 1 :(得分:1)

工具/索引有效!

class SearchesController < ApplicationController

  def index
    @tools = Tool.search do
      keywords params[:query]
    end.results

    @inventories = Inventory.search do
      keywords params[:query]
    end.results

    respond_to do |format|
      format.html { render template: "tools/index"  }
    end 
  end

end

答案 2 :(得分:0)

你可以像这样使用redirect_to:

redirect_to '/your_route/to_home'