2015-11-25 5 views
0

Я пытаюсь получить доступ к свойству, содержащемуся внутри моего пользовательского объекта. Моя модель пользователя has_many: posts. В контроллере, как я получу доступ к этим сообщениям? Создать метод в модели?Как получить доступ к переменным в модели

def posts 
    @posts = Post.find(User_id: params[:id]) 
end 

или я могу напрямую обращаться к сообщениям для пользователя. User.posts Поскольку я в настоящее время проживаю в контроллере, контроллер знает о выбранной модели? Или мне нужно снова вытащить информацию?

ответ

2

Вы можете запросить базу данных для всех сообщений с определенным user_id, как это:

@posts = Post.where(user_id: params[:id]) 

В качестве альтернативы, вы можете найти пользователя, а затем получать все сообщения, связанные с этим пользователем, как это:

user = User.find(params[:id]) 
@posts = user.posts 
1

Предполагая, что ваш id в params является идентификатором вашего пользователя, вы можете использовать user = User.find(params[:id]), чтобы получить пользователя и @posts = user.posts, чтобы получить все сообщения этого пользователя.

0

Итак, речь идет не о том, где вы находитесь, а о том, что вы называете.

Я уверен, что вы знакомы с отношениями ...

Когда у вас есть отношения, то это означает, что вы можете получить в одном отношении от других через то, что связь существует между ними.

Если я сын моего отца, вы можете получить меня непосредственно, проверив детей моего отца. (Не обязательно, чтобы все дети в деревне первым)

Так, в результате чего всю свою историю все вместе, с ассоциацией между вашим Post и User, вы всегда можете позвонить user.posts (user быть экземпляром из User) и post.userpost быть экземпляром Post)

0

Рубин на Rails руководства есть раздел об ассоциациях, который является то, что вы хотите. Он находится здесь: http://guides.rubyonrails.org/association_basics.html

В двух словах, поскольку вы добавили ассоциацию в своей пользовательской модели к нескольким пост-записям, Rails построит вспомогательный метод в вашей пользовательской модели, называемой сообщениями. Вы можете использовать это для доступа ко всем сообщениям, связанным с этим пользователем.

Когда вы создаете сообщение, пост-запись должна иметь столбец с именем user_id. Это обеспечит «физическую» связь между моделями пользователей и сообщений.Вы можете получить доступ к сообщению от пользователя следующим образом:

user.posts each do |post| 
    # do something with post.content 
end 

Чтобы получить сообщения, которые соответствуют определенным критериям в коллекции сообщений вы можете запросить так:

posts = user.posts.where(:something => 'matches criteria') 

Если вы знаете, что есть только один пост, который соответствует критериям, вы можете сделать это:

post = user.posts.where(:something => 'matches criteria').first 

Для модели post также требуется принадлежность пользователя to_to: user. (The belongs_to будет генерировать вспомогательный метод под названием пользователя в почтовой модели, которую затем можно использовать для доступа к записи пользователя с поста.) Например:

user_email = post.user.email 

Запись пользователя не требуется столбец POST_ID начиная с Rails знает, что user.post относится к столбце и автоматически генерирует запрос с использованием user_id.

В любом случае, руководство, которое я связал выше, предоставит вам всю необходимую информацию и многое другое.