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  
4

2 回答 2

1

The error is complaining about parse not being a method of your Scan model (not your controller). In this context parse will be a method defined automatically by Rails for one of Scan's attributes but in this case it's missing.

If you have added an attribute called parse to Scan using a migration you might need to run rake db:migrate.

于 2012-05-18T13:43:15.493 回答
1

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

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

正如评论中所指出的,您可以通过将特定方法声明为“帮助器”方法来绕过此限制,这会将它们公开给视图。

ScanController < ApplicationController

  helper_method :parse

  def parse
    @scan = Scan.new
  end

  ...

end
于 2012-05-18T13:46:02.293 回答