ActionView :: Template: Error (неопределенный метод 'first_name' для nil: NilClass) - PullRequest
0 голосов
/ 04 января 2012

Мое приложение, кажется, случайно выдает ошибку, когда пользователи пытаются загрузить данные сетки в форму:

   ActionView::Template::Error (undefined method `first_name' for nil:NilClass):
3:          t = @conts
4:                          xml.tag!("row",{ "id" => t.id }) do
5:
6:                                  xml.tag!("cell", t.first_name)
7:                                  xml.tag!("cell", t.last_name)
8:                          xml.tag!("cell", t.email)
9:                                  xml.tag!("cell", t.phone_1)

И вот файл контроллера

 def compdata
       @conts = Continfo.find_by_id(params[:id])
    end

Соответствие compdataRXML-файл

     xml.instruct! :xml, :version=>"1.0" 
       xml.tag!("rows") do
     t = @conts
        xml.tag!("row",{ "id" => t.id }) do

            xml.tag!("cell", t.first_name)
            xml.tag!("cell", t.last_name)
            xml.tag!("cell", t.email)
            xml.tag!("cell", t.phone_1)
            xml.tag!("cell", t.phone_2)
            xml.tag!("cell", t.homepage)
            xml.tag!("cell", t.skype)
    end
end

1 Ответ

0 голосов
/ 04 января 2012

Первый элемент

Похоже, у вас есть несколько других похожих вопросов ( здесь и здесь ), открытых прямо сейчас, и для текущего, и для этогоодин выглядит так, как будто ваше @conts значение в настоящее время nil означает, что ничего не было возвращено при запуске поиска:

def compdata
  @conts = Continfo.find_by_id(params[:id])
end

Вы уверены, что в вашей таблице есть значение с idравно params[:id]?

Если там будет несоответствие, это будет первое место, на которое я посмотрю.

Второй элемент

Вы также можете столкнуться с проблемойпопытка вызвать метод each для @conts, потому что метод find_by_id не вернет массив.Если вы хотите, чтобы он перебирал каждую запись вместо каждой клавиши / val, попробуйте использовать find_all_by_id, который вернет array .

Третий элемент

После просмотраВаш другой вопрос, похоже, что ваш синтаксис отличается от этого, но не следует ли вам повторить итерацию по @conts снова, как это?

xml.tag!("rows") do
  @conts.each do |t|
    xml.tag!("row",{ "id" => t.id }) do
      xml.tag!("cell", t.first_name)
      xml.tag!("cell", t.last_name)
      xml.tag!("cell", t.email)
      xml.tag!("cell", t.phone_1)
      xml.tag!("cell", t.phone_2)
      xml.tag!("cell", t.homepage)
      xml.tag!("cell", t.skype)
    end
  end
end

Это был бы способ назначить t вместо какt = @conts, особенно если вы планируете пройти через многие из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...