NoMethodError при использовании: включить ассоциацию в Rails 3 с Active Record - PullRequest
1 голос
/ 14 сентября 2011

Очевидно, я упускаю что-то простое здесь. Вот мои два класса и код, который я звоню. Когда я использую: include с find, он взрывается и выдает мне NoMethodError в строке поиска. Когда я не использую: include работает нормально (но, очевидно, не выполняет соединение)

Вызываемый код

def index
    @users = User.find(:all, :include => [:org])
end

Классы

class User < ActiveRecord::Base
    belongs_to :org, :primary_key => :org_id
end

class Org < ActiveRecord::Base
    #define primary key because it is not :id
    #because this table is in an old db 
    #that can't be changed
    set_primary_key :org_id

    has_one :user

    def full_name
        "#{emp_fname} #{emp_lname}"
    end
end

Точная ошибка

NoMethodError (У вас есть нулевой объект, когда вы этого не ожидали! Возможно, вы ожидали экземпляр Array. Произошла ошибка при оценке nil.each):

Ответы [ 2 ]

0 голосов
/ 15 сентября 2011

Хорошо, так что после многих копаний, проб и ошибок, в основном это была комбинация наличия одной таблицы в одной схеме, а другой - в другой схеме.Указав полное имя таблицы для наших объектов активных записей, активная запись перестала вызывать себя.

Итак, итоговый код:

Вызываемый код

def index
    @users = User.includes(:org)
end

Классы

class User < ActiveRecord::Base
    set_table_name "DOC_REQUEST.USERS"

    belongs_to :org, :primary_key => :org_id
end

class Org < ActiveRecord::Base
    set_table_name "AOS.ORG"

    #define primary key because it is not :id
    #because this table is in an old db 
    #that can't be changed
    set_primary_key :org_id

    has_one :user

    def full_name
        "#{emp_fname} #{emp_lname}"
    end
end
0 голосов
/ 15 сентября 2011

На какой версии рельсов вы находитесь? Ваш тег говорит 3 - это 3.1 или один из 3.0.x серии? В любом случае, в версии 3.0.x это выглядит так: синтаксис include для хеша для find не поддерживается .

Попробуйте User.includes(:org).find(:all).

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