2015-12-29 3 views
0

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

У меня есть friendships стол,

create_table "friendships", force: :cascade do |t| 
    t.integer "user_id" 
    t.integer "friend_id" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
end 

Когда пользователь добавляет еще пользователей в качестве друга создается новая запись,

Это определение индекса на friendships_controller

def index 
    friend = current_user.friendships 
    render :json => friend.to_json() 
end 

И это выход json.

{"id":1,"user_id":1,"friend_id":2,"created_at":"2015-12-29T13:18:44.499Z","updated_at":"2015-12-29T13:18:44.499Z"}, 
{"id":2,"user_id":1,"friend_id":3,"created_at":"2015-12-29T13:18:45.463Z","updated_at":"2015-12-29T13:18:45.463Z"}, 
{"id":3,"user_id":1,"friend_id":4,"created_at":"2015-12-29T13:18:46.420Z","updated_at":"2015-12-29T13:18:46.420Z"} 

Но эти данные вряд ли пригодны. Можно ли вводить пользовательские данные в дружбу json?

{"id":1,"email":"[email protected]","name":"Peter Boomsma"}, 
{"id":2,"email":"[email protected]","name":"Jan Jansen"}, 
{"id":3,"email":"[email protected]","name":"Kees Keesen"}, 
{"id":4,"email":"[email protected]","name":"Piet Pietersen"} 

Так что выход дружба JSON выглядит так,

{"id":1,"user_id":1,"friend_id":2,"email":"[email protected]","name":"Jan Jansen","created_at":"2015-12-29T13:18:44.499Z","updated_at":"2015-12-29T13:18:44.499Z"}, 
{"id":2,"user_id":1,"friend_id":3,"email":"[email protected]","name":"Kees Keesen","created_at":"2015-12-29T13:18:45.463Z","updated_at":"2015-12-29T13:18:45.463Z"}, 
{"id":3,"user_id":1,"friend_id":4,"email":"[email protected]","name":"Piet Pietersen","created_at":"2015-12-29T13:18:46.420Z","updated_at":"2015-12-29T13:18:46.420Z"} 

* REMOVE ФУНКЦИЯ *

app.factory('removeFriend', ['$http', function($http) { 
    return { 
    removeFriend: function(friend) { 
    var _friendID = parseInt(friend.id); 
    console.log (_friendID) 
    return $http.delete('/friendships/'+_friendID + '.json'); 
    } 
    }; 
}]) 

Это услуга удалить в угловой, здесь он проходит друга .id, а не дружба.

+0

Первое использование обычных методов Rails для получения пользовательских данных в дружбе. Я также рекомендовал бы отправлять только нужные данные на уровень представления. –

+0

@DaveNewton 'Первое использование обычных методов Rails для получения пользовательских данных в дружбе.« Разве это не мой вопрос? Как объединить данные? –

+0

Я прочитал ваш вопрос как «как я вставляю данные в JSON», а не «как использовать Rails». Виноват. –

ответ

1

я реализую что-то вроде следующего:

Добавить ассоциацию в модели пользователя, чтобы получить друзей пользователя, т.е. пользовательских объектов

has_many :friends, through: :friendships, foreign_key: 'friend_id' 

теперь получить друзей данных в контроллере

friends = current_user.friends.as_json(:only => [:name, :email, :id]) 
render :json => friends # [{:name => 'test', :email => '[email protected]', :id => 1},{...}] 

Если вам нужны текущие пользовательские данные, в ответе вы можете сделать что-то следующее:

render :json => current_user.as_json(only: [:id, :name, :email]).merge(:friends => friends) 
# {:id => 1, :name => 'user', :email => '[email protected]', friends: [{:name => 'test', :email => '[email protected]', :id => 1},{}]} 

В приведенном выше ответе вы можете отправлять точные данные без повторения.

+0

Что это за волшебство! Он работает, но как рельсы знают данные пользователей? Я не вижу связи. Это из-за дружеской дружбы, friend_id? –

+0

Попробуйте запустить User.first.friendships и User.first.friends на консоли и проверьте sql, сгенерированные каждой командой. Вы увидите соединение! –

+0

У меня есть следующий вопрос. Я пытаюсь создать функцию remove friend, но я не могу настроить таргетинг на идентификатор дружбы, так как мы рендерим друзей. В любом случае? –

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