find_or_create方法在Rails rake任务中不起作用

时间:2011-04-30 13:22:49

标签: ruby-on-rails

我写了如下的rake任务,

namespace :db do
  desc "load photo"
  task :load_photo  => :environment do
    begin
      model=Model.find_or_create_by_photo(:name => open("http://domain.com/jsx.jpg"))
    end
      puts "complete"
    rescue Exception => e
      puts e
    end
  end   
end

当我运行rake db时:load_photo收到错误" **undefined method 'find_or_create_by_photo'** for #<Class:0x37079e8>" 请帮我详细说明一下?

提前致谢。

3 个答案:

答案 0 :(得分:2)

find_and_create_by方法是动态生成的(作为find_by或create_by方法)。如果调用Model.find_or_create_by_column,Ruby会引发NoMethodError。在救援块内调用该错误。如果发生此错误,Rails将在模型中查找与方法名称匹配的列。如果找到列,则动态创建方法。如果没有找到这样的方法,则会再次引发错误。

检查您是否确实有一个名为photo的列。通常这应该有用。

答案 1 :(得分:1)

如果照片是属性:

Model.find_or_create_by_photo photo_name_string

如果照片是关联:

Model.find_or_create_by_photo_id 7

对于您的回形针案例(名为“photo_file_name”的数据库列):

Model.find_or_create_by_photo_file_name 'lala.png'

答案 2 :(得分:0)

这是我的模型代码,我使用paperclip作为gem,模型属性是photo_file_name,photo_content_type和photo_file_size。

        class Model < ActiveRecord::Base  
           has_attached_file :photo, :styles => { :small => "150x150>", :thumb => "75x75>" } 
        end