找不到方法,但方法就在那里

时间:2012-05-18 13:39:28

标签: ruby-on-rails ruby-on-rails-3.1

我为其中一个对象添加了一个额外的视图,以及相应的方法和路由,但我无法加载视图:

NoMethodError in Scans#parse

Showing J:/code/vsdb/app/views/scans/parse.html.erb where line #18 raised:

undefined method `parse' for #<Scan:0x23b0590>
Extracted source (around line #18):

15: 
16:   <div class="field">
17:     <%= s.label :parse %><br />
18:     <%= s.text_field :parse %>
19:   </div>
20: <% end -%>

以下是扫描控制器中的方法。方法就在那里,所以我不明白错误信息是在抱怨什么。我尝试重启服务器。我打算用这种方法做更多的事情,我只想让它现在显示一下。

def parse
  @scan = Scan.new
end  

2 个答案:

答案 0 :(得分:1)

错误是抱怨解析不是扫描模型的方法(不是您的控制器)。在这个上下文中,解析将是Rails为Scan的一个属性自动定义的方法,但在这种情况下它是缺失的。

如果您使用迁移向Scan添加了一个名为parse的属性,则可能需要运行rake db:migrate。

答案 1 :(得分:1)

通常,Rails视图无法访问控制器。如果你有一个需要调用的控制器方法,你应该在将控制权交给视图之前在操作中执行。

在您的情况下,您有一个名为@scan的变量,它是Scan类的一个实例。这是视图试图找到方法的地方。

正如评论中所指出的,你可以通过将特定方法声明为“帮助”方法来解决这个限制,这些方法会将它们暴露给视图。

ScanController < ApplicationController

  helper_method :parse

  def parse
    @scan = Scan.new
  end

  ...

end