Ошибка отладки в скрипте Ruby - PullRequest
0 голосов
/ 02 марта 2010

Я очень новичок в Ruby. У меня есть следующий фрагмент кода, который дает мне ошибку.

class ItemsController < ApplicationController
  def populate
    Location.all.each { |l|
      place = l.radar_place 
      next if !place 
      news_items = place.radars
      news_items.each { |ni|
        t = Lbs2.new  
        t.lat = l.lat
        t.lng = l.lng
        t.body = ni.body 
        t.save if !Lbs2.find_by_body(ni.body) #avoiding redundant news_items
      }
    }
    render :text => "Success"  
  end
end

Ошибка при отображении URL NoMethodError в ItemsController # populate неопределенный метод `lat = 'для Lbs2 id: ноль, тело: ноль, созданный_кат: ноль, обновленный_кат: ноль

Этот код прекрасно работал без оператора "if! Lbs2.find_by_body (ni.body)". Когда я включил это, чтобы избежать лишних news_items, это дало мне вышеупомянутую ошибку. Может кто-нибудь сказать мне, как избавиться от этой ошибки в то же самое время, избегая избыточного наполнения news_items в Lbs2? Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 02 марта 2010

ОК, здесь происходит несколько вещей. В сообщении об ошибке говорится, что он не знает, как что-то сохранить в атрибуте "lat" объекта Lbs2. Даже несмотря на то, что вы сказали script / generate, что вам нужно поле "lat" для Lbs2, похоже, что оно не было сохранено в конце концов. Вы можете проверить db / schema.rb, чтобы быть уверенным. Но вашим первым шагом, вероятно, будет добавление этого поля в соответствующую таблицу в базе данных. Прочитайте Руководство по миграции Rails для получения дополнительной информации.

Кроме того, есть намного лучший способ проверить уникальность поля. В app/models/lbs2.rb (при условии, что ваш объект Lbs2 определен там), добавьте строку (вне любых методов), которая говорит:

validates_uniqueness_of :body

Для получения дополнительной информации прочтите Руководство по проверке Rails .

Надеюсь, это поможет,
-Джефф Т.

0 голосов
/ 02 марта 2010

чтобы избежать лишних элементов, я думаю, вы можете перезаписать метод validate(). что-то вроде следующего:

def validate
   conditions = {"lat" => self.lat, "lng" => self.lng}
   if Lbs2.first(:conditions => conditions)
      errors.add_to_base "Your error message"
   end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...