为什么这个named_scope会创建一个NoMethodError?
我不知道这段代码在哪里创建了这个 NoMethodFound 错误,并且非常希望有任何有用的建议。
这是错误消息:
NoMethodError in UploadsController#create
我的模型的相关部分如下所示:
named_scope :by_name, lambda { |marker_name|
{:conditions => ["marker_name = ?", marker_name]}}
def self.parse_file(file)
FasterCSV.foreach(file.path,:headers=>"first_row", :col_sep=>"\t") do |row|
if $header_row == 1
$markers = {} # define global hash for marker id lookup
$markers_arry = [] # define global array for marker names
get_markers(row)
$header_row = 0
# done with header row; loop back to beginning for first row of actual data
next
end
...
def self.get_markers(row)
offset = 8 # this was determine by trial-&-error
i = 0
for col in row
i += 1
if i < offset
next
end
this_marker = Marker.by_name(row[col])
$markers[row[col]] = this_marker.id # associate the marker_name with its id
$markers_arry[col] = row[col]
end
end
跟踪如下所示:
> undefined method `by_name' for
> #<Class:0xb6726e40>
> vendor/rails/activerecord/lib/active_record/base.rb:1667:in
> `method_missing'
> app/models/upload.rb:99:in
> `get_markers'
> /usr/lib/ruby/gems/1.8/gems/fastercsv-1.5.4/lib/faster_csv.rb:362:in
> `each'
> /usr/lib/ruby/gems/1.8/gems/fastercsv-1.5.4/lib/faster_csv.rb:362:in
> `each' app/models/upload.rb:91:in
> `get_markers'
> app/models/upload.rb:37:in
> `parse_file'
> /usr/lib/ruby/gems/1.8/gems/fastercsv-1.5.4/lib/faster_csv.rb:1545:in
> `each'
> /usr/lib/ruby/gems/1.8/gems/fastercsv-1.5.4/lib/faster_csv.rb:1048:in
> `foreach'
> /usr/lib/ruby/gems/1.8/gems/fastercsv-1.5.4/lib/faster_csv.rb:1222:in
> `open'
> /usr/lib/ruby/gems/1.8/gems/fastercsv-1.5.4/lib/faster_csv.rb:1047:in
> `foreach' app/models/upload.rb:25:in
> `parse_file'
> app/controllers/uploads_controller.rb:55:in
> `create'
> vendor/rails/actionpack/lib/action_controller/base.rb:1162:in
> `send'
I don't see where this code is creating this NoMethodFound error, and would really like any helpful suggestions.
Here's the error message:
NoMethodError in UploadsController#create
The relevant parts of my model looks like this:
named_scope :by_name, lambda { |marker_name|
{:conditions => ["marker_name = ?", marker_name]}}
def self.parse_file(file)
FasterCSV.foreach(file.path,:headers=>"first_row", :col_sep=>"\t") do |row|
if $header_row == 1
$markers = {} # define global hash for marker id lookup
$markers_arry = [] # define global array for marker names
get_markers(row)
$header_row = 0
# done with header row; loop back to beginning for first row of actual data
next
end
...
def self.get_markers(row)
offset = 8 # this was determine by trial-&-error
i = 0
for col in row
i += 1
if i < offset
next
end
this_marker = Marker.by_name(row[col])
$markers[row[col]] = this_marker.id # associate the marker_name with its id
$markers_arry[col] = row[col]
end
end
The trace looks like:
> undefined method `by_name' for
> #<Class:0xb6726e40>
> vendor/rails/activerecord/lib/active_record/base.rb:1667:in
> `method_missing'
> app/models/upload.rb:99:in
> `get_markers'
> /usr/lib/ruby/gems/1.8/gems/fastercsv-1.5.4/lib/faster_csv.rb:362:in
> `each'
> /usr/lib/ruby/gems/1.8/gems/fastercsv-1.5.4/lib/faster_csv.rb:362:in
> `each' app/models/upload.rb:91:in
> `get_markers'
> app/models/upload.rb:37:in
> `parse_file'
> /usr/lib/ruby/gems/1.8/gems/fastercsv-1.5.4/lib/faster_csv.rb:1545:in
> `each'
> /usr/lib/ruby/gems/1.8/gems/fastercsv-1.5.4/lib/faster_csv.rb:1048:in
> `foreach'
> /usr/lib/ruby/gems/1.8/gems/fastercsv-1.5.4/lib/faster_csv.rb:1222:in
> `open'
> /usr/lib/ruby/gems/1.8/gems/fastercsv-1.5.4/lib/faster_csv.rb:1047:in
> `foreach' app/models/upload.rb:25:in
> `parse_file'
> app/controllers/uploads_controller.rb:55:in
> `create'
> vendor/rails/actionpack/lib/action_controller/base.rb:1162:in
> `send'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
请注意,在 Rails 3 中,
named_scope
已重命名为scope
。Note that in Rails 3,
named_scope
has been renamed toscope
.您是否尝试过只执行“by_name”而不是“Marker.by_name”?
此外,Rails 动态生成许多类似的方法。例如,
...无论如何都应该有效。
Have you tried doing just "by_name" instead of "Marker.by_name" ?
Also, Rails dynamically generates many similar methods. For instance,
... Which ought to work regardless.