Как я могу получить доступ к другой коллекции объектов в представлении в Rails? - PullRequest
0 голосов
/ 15 ноября 2008

Я не уверен, как искать этот ответ, поэтому я пойду и спрошу его.

В моем проекте rails у меня есть модель User и модель foo. Пользователь может иметь одну или несколько моделей foo. Я достиг этого, добавив

has_many :foo, :through => :user_foo

в моей модели пользователя.

Теперь, на мой взгляд, я хочу отобразить список всех foos. Не только те, которые выбраны (я буду делать эти переключатели, но это другой вопрос). Когда я пытаюсь сделать это (да, я использую хамл):

    - for foo in @foos

Я получаю эту ошибку:

You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each

Я предполагаю, что это вызвано тем, что коллекция @foos пуста. Как правильно получить доступ к этой коллекции в моем представлении пользователя?

** редактировать **

Я думаю, что мой начальный вопрос был немного запутанным. Первая проблема, которую я пытаюсь выяснить, заключается в том, как получить доступ к коллекции foos из моего пользовательского представления. отношения не имеют значения. Я просто хочу список всех foos в системе. не только назначенные пользователю.

Ответы [ 3 ]

3 голосов
/ 15 ноября 2008

Я предполагаю, что у вас есть belongs_to :user в вашем классе Foo?

Как выглядит код вашего контроллера? Чтобы показать все foos, оно должно выглядеть примерно так:

def index
  @foos = Foo.all
end
2 голосов
/ 18 ноября 2008

Для доступа ко всем Foos просто используйте

@foos = Foo.all

в вашем контроллере.

Ошибка, с которой вы сталкивались ранее, ошибка объекта nil может быть предотвращена с помощью проверки вроде:

- if @foos.empty?
  %p There are no Foos
- else
  ...

Кроме того, лучший способ перебора коллекции - использовать метод #each, а не цикл for. Например:

- @foos.each do |foo|
  %p= foo.name

Итак, законченный пример будет:

- if @foos.empty?
  %p There are no Foos
- else
  - @foos.each do |foo|
    %p= foo.name
0 голосов
/ 17 ноября 2008

Ошибка предполагает, что объект foo пуст.

Если вы хотите, чтобы все Foo были связаны с текущим объектом пользователя, вы используете

my_user = User.find(1) # finds user with id no. 1
list_of_foos = my_user.foos # finds all foos associated with my_user

должно работать

Если вы ищете все foo, независимо от их ассоциации, вы используете

list_of_foos = Foo.find(:all)

Это может не соответствовать синтаксису Rails, который в настоящее время в моде: прошло много времени с тех пор, как я активно занимался разработкой Rails, но если я правильно понял вопрос, это должно вам помочь. Удачи.

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