2015-04-02 7 views
0

Вот ситуация. Я использую login facebook и хочу сохранить массив друзей на моем сервере rails с помощью базы данных postgres.Неправильно ли сохранять данные как ActionController :: Параметры в базе данных postgres с Rails?

В PARAMS, поступающие на fb_friends являются:

"fb_friends"=>[{"id"=>"1381984758791468", "name"=>"ios ipod"}] 

Апи контроллер сильные параметры: user_params имеет fb_friends: [:id, :name]

В модели пользователя, сериализовать fb_friends.

serialize :fb_friends 

Вся эта работа, но я заметил, что тип класса для моего fb_friend является ActionController::Parameters и он ведет себя как Hash. Это плохая вещь?

В консоли Rails,

u.fb_friends.first.class 
=> ActionController::Parameters 

u.fb_friends.first[:id] 
=> "1381984758791468" 

u.fb_friends.first[:name] 
=> "ios ipod" 

EDIT:

Забыл добавить моя схема/миграция

Migraton:

change_column :users, :fb_friends, :text 

схемы для таблицы пользователей:

t.text  "fb_friends",  default: "{}" 
+1

Почему кто-то голосует, чтобы закрыть это? :( – okysabeni

ответ

2

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

FacebookFriend(id, user_id, facebook_friend_id, name, created_at, updated_at) 

class User < ActiveRecord::Base 
    has_many :facebook_friends 
end 

class FacebookFriend < ActiveRecord::Base 
    belongs_to :user 
end 

Вы можете также сделать «имеет много через» отношения, если вы считаете, что ваши пользователи часто имеют общие FacebookFriends.

0

Если вы не собираетесь десериализовать его и использовать в качестве экземпляра ActionController :: Parameters, вы, вероятно, должны преобразовать его в стандартный хэш. Для дополнительных точек используйте hstore в postgres, и вы все равно можете искать и т. Д.

+0

Как бы это сделать в коде? В классе модели User.rb? В контроллере – okysabeni

+1

возможно просто сериализовать: fb_friends.to_json или что-то подобное .. у нас нет времени на тестирование прямо сейчас. to_a, to_h, to_json должен изменить его на более ванильный тип данных. – errata