2012-04-17 5 views
1

Предположим, у меня есть приложение для рельсов с двумя моделями Person и House. Каждый объект Person имеет свойство House_id.Объем рельсов метод find_by_id

Я хотел бы определить следующий метод внутри моей Person модели:

def locate_house 
    current_house_id = house.find_by_id(person) 
end 

Но я получаю неопределенные переменные ошибки для house, как я могу гарантировать, что это находится в пределах объема?

+1

Я действительно смущен тем, что пытается сделать ваш 'locate_house'. Вы можете просто сделать 'person.house', чтобы получить связанный дом ... –

+0

В этом случае ассоциация модели не существует,« человек »имеет свойство« house_id ». –

+0

Затем определите взаимосвязь. См. Мой ответ. –

ответ

2

Вы пытаетесь переписать что-то уже встроенное в рельсы. Используйте отношения belongs_to:

class Person < ActiveRecord::Base 
    belongs_to :house 
end 

Тогда вы можете просто сделать:

person.house 

Чтобы получить соответствующий дом.

+0

... и это был бы правильный способ сделать это. – rjz

+0

Предположим, что я создал объект Person через JSON, и я не использую вложенные модели, поэтому единственное, что мне нужно, это 'house_id'. Как я могу гарантировать, что правильный дом используется? –

+0

Если вы заполняете house_id где угодно, отношения будут сохранены. Но будьте осторожны с принятием недостоверных данных из формы и присвоением идентификатора. Это уязвимость системы безопасности. –

1

Ваш model-- House --is константу рубиновый, что требует капитализации

def locate_house 
    current_house_id = House.find_by_id(person) 
end 
+0

@Andrew. Даже если это путь вместо определения ассоциации (я не могу себе представить, почему), обратите внимание, что вы назначаете полноценный объект переменной с именем, заканчивающимся на '_id'. Способ легко вызвать ошибки в стиле головной боли. –

+0

Во-вторых, что «воображаю» бит. Шутки в сторону. @ Ответ Бена спасет вас от бесчисленных головных болей по линии. – rjz

0

дом является постоянным и нуждается в заглавной буквы, как кто-то сказал, посмотрите на Rails Guides относительно отношений между Active Record моделей. Существует много возможных реалий, многие из которых, вероятно, вы ищете. Поскольку на самом деле человек может иметь несколько домов.

Смежные вопросы