【问题标题】:How to pass attributes in Serializer not in model in Rails (ActiveRecord)?如何在序列化程序中传递不在 Rails 模型中的属性(ActiveRecord)?
【发布时间】:2019-08-14 09:17:03
【问题描述】:

我正在构建一个具有 UsersSightingsComments 的 Rails 后端。模型Comment 加入SightingUser。我想将用户名或用户名连同作为CommentSerializer 中连接表Comments 的属性的user_id 一起传递到我的前端。

我可以使用 Active Record 或 Ruby 方法访问这些数据,但实际上如何使这个属性成为通过 Serializer 传递的属性?

这是我的CommentSerializer 文件:


class CommentSerializer < ActiveModel::Serializer

  attributes :id, :body, :likes, :user_id

  belongs_to :commentable, :polymorphic => true
  belongs_to :sighting
  has_many :comments, as: :commentable
end

【问题讨论】:

    标签: ruby-on-rails activerecord attributes serialization


    【解决方案1】:

    所以我很幸运地在我的序列化程序文件中使用了这个方法来传递这个属性:

      def user_name
     User.all.find { |f| f.id == object.user_id }.username 
    

    结束

    【讨论】:

      【解决方案2】:

      例如添加到您的属性 :user_name 然后添加

      def user_name object.user.name end

      在您的 CommentSerializer 类中

      【讨论】:

      • 感谢您的回复,非常高兴我可以直接在 Serializer 中做一些甜蜜的 Ruby 方法。我用user_namecomments 表添加了一个迁移文件,所以它现在是一个属性。我把你上面给出的代码放在CommentSerializer 类中但是得到``` NoMethodError (undefined method name' for 42:Integer): app/serializers/comment_serializer.rb:10:in user_name' ```
      • 我最终通过使用这种方法来深入了解信息以查找关系。 ``` def user_name User.all.find { |f| f.id == object.user_id }.username end ```
      • 这不是 Rails 方式。您可以像 belongs_to :user 这样添加注释模型代码。请参阅此guides.rubyonrails.org/…。在此之后,您可以使用comment.user 方法获取您的用户的对象
      • 仅供参考,您可以像这样优化您的用户搜索:User.find_by(id: object.user_id)。在您的情况下,您加载所有用户并通过 ruby​​ 搜索需要的用户。在我的例子中,用户是通过一个 SQL 请求找到的。
      • 我确实有模特关系,但无法正常工作。我会再试一次,看看我错过了什么。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      • 2019-09-17
      • 2017-10-09
      相关资源
      最近更新 更多