我已经序列化了Post模型列
serialize :user_ids
保存后我可以在我的控制台中看到:
> p = Post.last
=> #<Post id: 30, title: "almost done2", created_at: "2017-05-08 15:09:40", updated_at: "2017-05-08 15:09:40", attachment: "LOGO_white.jpg", user_ids: [1, 2]>
我已经允许params:我的控制器上的user_ids
def post_params
params.require(:post).permit(:title, :attachment, :user_ids)
end
我需要的只是存储@user_ids并将其复制到其他模型作为atrribute,
但无法获得@user_ids = @Post.last.user_ids
获取错误
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: users.post_id: SELECT "users".id FROM "users" WHERE "users"."post_id" = ?
感谢您的帮助!
答案 0 :(得分:1)
不幸的是,我认为您为序列化属性选择了错误的名称!
请参阅,Rails正在尝试提供帮助,而relation_ids方法允许您调用所有相关对象的ID。考虑这两个模型
class User
belongs_to :post
end
class Post
has_many :users
end
你可以打电话给
Post.last.user_ids
然后会尝试查找属于此帖子的所有用户,并将其返回给他们。
查看您获得的查询:
SELECT "users".id FROM "users" WHERE "users"."post_id" = ?
这正是Rails正在尝试做的事情。选择属于帖子的USERS并为您提供ID。但是,用户没有post_id列,因此失败。
最好将序列化列的名称更改为不会混淆Rails的内容。但是,如果要保留列,可以通过将其置于Post模型
来覆盖该方法 def user_ids
self[:user_ids]
end
然而,这是不理想的,但是会让你决定做什么。我的偏好是列重命名,真的。会为你节省很多麻烦