Ruby on rails 为什么这个命名的_范围会创建一个NoMethodError?

Ruby on rails 为什么这个命名的_范围会创建一个NoMethodError?,ruby-on-rails,named-scope,ruby-on-rails-2,ruby-1.8,Ruby On Rails,Named Scope,Ruby On Rails 2,Ruby 1.8,我不知道这段代码在哪里创建了这个NoMethodFound错误,我真的希望得到任何有用的建议 以下是错误消息: NoMethodError in UploadsController#create 我的模型的相关部分如下所示: named_scope :by_name, lambda { |marker_name| {:conditions => ["marker_name = ?", marker_name]}} def self.parse_file(file)

我不知道这段代码在哪里创建了这个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
named_scope:by_name,lambda{| marker_name |
{:conditions=>[“marker\u name=?”,marker\u name]}
def self.parse_文件(文件)
FasterCSV.foreach(file.path,:headers=>first_row,:col_sep=>“\t”)do|row|
如果$header\u行==1
$markers={}#为标记id查找定义全局哈希
$markers_arry=[]#为标记名定义全局数组
获取_标记(行)
$header\u行=0
#完成标题行;返回到实际数据第一行的开头
下一个
终止
...
def自我获取标记(世界其他地区)
偏移量=8#这是通过试错确定的
i=0
对于列中的列
i+=1
如果我
跟踪结果如下所示:

> 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'
>未定义的方法“按名称”
> #
>vendor/rails/activerecord/lib/active_record/base.rb:1667:in
>`方法_缺失'
>app/models/upload.rb:99:in
>“拿着马克笔”
>/usr/lib/ruby/gems/1.8/gems/fastercsv-1.5.4/lib/faster\u csv.rb:362:in
>“每个人”
>/usr/lib/ruby/gems/1.8/gems/fastercsv-1.5.4/lib/faster\u csv.rb:362:in
>'each'app/models/upload.rb:91:in
>“拿着马克笔”
>app/models/upload.rb:37:in
>`parse_文件'
>/usr/lib/ruby/gems/1.8/gems/fastercsv-1.5.4/lib/faster\u csv.rb:1545:in
>“每个人”
>/usr/lib/ruby/gems/1.8/gems/fastercsv-1.5.4/lib/faster\u csv.rb:1048:in
>“foreach”
>/usr/lib/ruby/gems/1.8/gems/fastercsv-1.5.4/lib/faster\u csv.rb:1222:in
>“开着”
>/usr/lib/ruby/gems/1.8/gems/fastercsv-1.5.4/lib/faster\u csv.rb:1047:in
>'foreach'app/models/upload.rb:25:in
>`parse_文件'
>app/controllers/uploads_controller.rb:55:in
>“创造”
>vendor/rails/actionpack/lib/action\u controller/base.rb:1162:in
>“发送”
你试过只用“按姓名”而不是“按姓名”吗

此外,Rails动态生成许多类似的方法。比如说,

Marker.find_by_name("your_name_here")

。。。不管怎样,这都应该起作用。

注意,在Rails 3中,
命名范围
已重命名为
范围

在我的主题行中,我的意思是“命名范围”。我还要补充一点,我正在使用Rail2.1和Ruby1.8。谢谢!这个答案对我的项目很有帮助。