【问题标题】:Missing template缺少模板
【发布时间】:2009-11-23 23:51:05
【问题描述】:

所以我有这个代码:

<% form_tag(:action => 'find') do%>
  Product name:
  <%= text_field("cars_", "name", :size => "30") %>
  <input type ="submit" value="Find"/>
<%end%>

按下按钮后,我希望它完成在控制器中找到的方法(def find),但它请求 html.erb 文件:

模板丢失

视图中缺少模板汽车/find.erb 路径 H:\Documents 和 设置/所有者/我的 文档/NetBeansProjects/RailsApplication5/app/views

在find def(在控制器中找到)

def find
  @car = Car.new(params[:car_])
end

【问题讨论】:

  • 你有:action =&gt; 'find',但你的方法叫做search
  • ah sry 复制了错误的方法:find 方法是 def find @car = Car.new(params[:car_]) end

标签: ruby-on-rails templates views


【解决方案1】:

你的 find 方法的最后一行是什么?通常,如果您没有在控制器方法中指定要呈现的模板,Rails 会尝试查找与该方法同名的模板。这就是为什么它说它找不到汽车/find.erb。如果没有看到 find 操作中的代码,很难给出更好的答案。

【讨论】:

  • Chirs 是对的。如果您没有 find 方法的视图,那么您需要在方法末尾进行重定向,例如 render :action =&gt; :show
【解决方案2】:

您的 find 方法应该进行一些搜索,而不是使用参数进行初始化。如果您想进行搜索,我建议您查看thinking sphinxsearchlogic 之类的内容。

【讨论】:

    【解决方案3】:

    我相信您的代码正在执行查找操作。但是,在找到汽车对象后,它需要将其写入显示搜索结果的模板中。按照惯例,rails 在该控制器的视图文件夹中查找名为 find.html.erb 的文件。因此,您看到的错误消息意味着 Rails 已经执行了您操作中的代码行,现在正尝试生成一些 HTML 以发送回浏览器

    如果您在该控制器的视图文件夹中创建一个包含内容的简单文件:

    <%= @car.name %> 
    

    您应该会看到结果。

    但是,您的代码让我有点困惑,因为我不知道为什么 find 方法会创建一个新的 Car 对象。我希望是这样的:

    def find
      @car = Car.find_by_name(params[:name])
    end
    

    我还希望您的表单更像:

    <% form_tag(:action => 'find') do%>
      Product name:
      <%= text_field_tag("name", :size => "30") %>
      <%= submit_tag "find" %>
    <%end%>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-09
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-18
      相关资源
      最近更新 更多