2011-12-18 2 views
2

Я хотел бы сделать что-то вроде этого:Rails - Как добавить объект в переменную

@profiles 
#(I think in Java, so I have declared an @profiles variable there! I know it's probably wrong!) 
@users.each do |user| 
    profile = Profile.find(params[user.id]) 
    @profiles.add(profile) 
end 

Пользователя и профиля имеет отношение один-к-одному.

пользователь один профиль, профиль принадлежит пользователю

+1

Вы не «объявили» символ '@ переменную profiles' там. Вы просто пытались найти эту переменную экземпляра, и поскольку она не существует, строка оценивается как «nil». – d11wtq

ответ

5

Вам нужно для инициализации массива.


@profiles = [] 
@users.each do |user| 
    profile = Profile.find(params[user.id]) 
    @profiles << profile if profile 
end 

Если у вас есть отношения, вы должны быть в состоянии просто сказать:


@profiles = [] 
@users.each do |user| 
    profile = user.profile 
    @profiles << profile if profile 
end 
+0

d11wtq для редактирования :) – daniel

0

Просто сделайте следующее:

заменить

@profiles.add(profile) 

с

@profiles << profile 

< < оператор добавить элемент с правом на e массив слева.

+0

Я пробовал, но он дает ошибку .nil на @profiles – spuriosity

+0

Посмотрите ниже, вам нужно сначала инициализировать @profile – daniel

1

find уже будет возвращать коллекцию.

В этом случае, однако, это больше похоже вы должны иметь кодифицированный отношения:

class User 
    has_one :profile 
end 

class Profile 
    belongs_to :user 
end 

Информация: has_one, belongs_to

+0

, что я и имею, и я пытаюсь получить коллекцию профилей на основе коллекции идентификаторов пользователей, где user.id - profile.user_id – spuriosity

+0

@spuriosity Если это то, что у вас есть, почему вы его не показали? Как вы сохраняете профиль пользователя? Почему вы воссоздаете ассоциацию, когда Rails предоставляет ее вам бесплатно? –

+0

Я использую where ('user_id LIKE?', "% # {Search}%") для поиска (в профиле obj), но это, очевидно, поиск идентификаторов в таблице профилей. Мне нужно выполнить поиск в таблице пользователей, связанных с профилями, а не через таблицу профилей. Попытка разобраться в обходном пути. – spuriosity

1

Если у вас есть это в вас модели

class User 
    has_one :profile 
end 

class Profile 
    belongs_to :user 
end 

И это в вашем профиле миграции

t.integer :user_id 

Вы можете найти профили, как этот

@profiles = Profile.all 

, а затем в ваших взглядах

<% @profiles.each do |profile| %> 

<%= profile.user.name %> 

<%end%> 

обновления

Если у вас есть

где ('user_id НРАВИТСЯ? ', "% # {search}%")

попробуйте эти модели/user.rb.

def self.search(search) 
    if search 
     where('name LIKE ? ', "%#{search}%") 
    else 
     scoped 
    end 
end 

В контроллере:

@users = User.search (PARAMS [: поиск])

, а затем в ваших взглядах

<% @users.each do |user| %> 

<%= user.profile.name %> 

<%end%> 

A Guide to Active Record Associations

+0

У меня есть это: где ('user_id LIKE?', "% # {Search}%"), и мне нужно искать через атрибут .name пользователя в этом user_id – spuriosity

+0

Я сделал обновление ответа. Я присмотрюсь ближе завтра –