Метод find_or_create не работает в граблях Rails - PullRequest
0 голосов
/ 30 апреля 2011

Я написал задачу 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 ]

2 голосов
/ 01 мая 2011

Методы find_and_create_by генерируются динамически (как методы find_by или create_by). Если вы вызываете Model.find_or_create_by_column, Ruby вызывает ошибку NoMethodError. Ошибка вызывается в блоке спасения. Если возникает эта ошибка, Rails ищет столбцы в вашей модели, соответствующие имени метода. Если столбец найден, метод создается динамически. Если такой метод не найден, ошибка возникает снова.

Проверьте, действительно ли у вас есть столбец с именем photo. Обычно это должно работать.

1 голос
/ 30 апреля 2011

Если фотография является атрибутом:

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'
0 голосов
/ 02 мая 2011

Вот мой код модели, я использую скрепку в качестве драгоценного камня, атрибуты модели: photo_file_name, photo_content_type и photo_file_size.

        class Model < ActiveRecord::Base  
           has_attached_file :photo, :styles => { :small => "150x150>", :thumb => "75x75>" } 
        end 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...