在带有Rails的postgres数据库中将数据保存为ActionController :: Parameters是不是很糟糕?

时间:2015-04-02 18:17:14

标签: ruby-on-rails ruby facebook postgresql

情况如下。我使用facebook登录并希望通过postgres数据库将朋友数组保存到我的rails服务器中。

进入fb_friends的参数是:

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

Api控制器强参数: user_paramsfb_friends: [:id, :name]

在用户模型中,我序列化了fb_friends。

serialize :fb_friends

所有这些工作,但我注意到我的fb_friend的类类型是ActionController::Parameters,它的行为就像一个哈希。这是件坏事吗?

在Rails控制台中,

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

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

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

编辑:

忘记添加我的架构/迁移

Migraton:

change_column :users, :fb_friends, :text

用户表格架构:

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

2 个答案:

答案 0 :(得分: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

你也可以做一个&#34;有很多通过&#34;如果您认为您的用户通常会有常见的Facebook朋友,那就是关系。

答案 1 :(得分:0)

除非您要反序列化它并将其用作ActionController :: Parameters实例,否则您应该将其转换为标准哈希。对于额外的积分,使用postgres中的hstore,你仍然可以搜索等..