【问题标题】:Rails json object with model associations具有模型关联的 Rails json 对象
【发布时间】:2013-09-24 23:29:43
【问题描述】:

我是 Ruby 和 Rails 的新手。我在为我的服务构建 json 响应时遇到问题。 我有两个模型:

class Transaction < ActiveRecord::Base
has_and_belongs_to_many :users
end

class User < ActiveRecord::Base
has_and_belongs_to_many :transactions
end

所以用户有交易的集合,而交易有用户的集合。我要做的是返回涉及询问用户的所有交易和涉及所有交易的其他用户。

我的 json 应该是这样的:

{"transactions":[{"name":"transaction1", "users":[{"userName":"user1"},{"userName":"user2"}]},{"name":"transaction2", "users":[{"userName":"user1"},{"userName":"user2"}]}]}

这是我的代码:

@user = User.find_by_facebookId(params[:id])

#json = User.find_by_facebookId(params[:id], :include => :transactions).to_json( :include => :transactions )

if @user != nil
   render json: {"transactions" => @user.transactions.map do |transaction|
         transaction
   end
   }
else
  render json: {"transactions" => [{}]}
end

【问题讨论】:

    标签: ruby-on-rails ruby json associations


    【解决方案1】:

    您可以执行以下操作:

    json_data = @user.transactions.map do |transaction|
      transaction.as_json(include: :users)
    end
    render json: { transactions: json_data }
    

    基于此问题/答案:Rails Object Relationships and JSON Rendering

    【讨论】:

    • 谢谢!这几乎可以完成这项工作。我只得到 \ 字符 例如:{"transactions":["{\"name\":\"test\",\"users\": ...
    • 您可能需要在地图的结束关键字后添加.to_json 以消除此转义过程
    • 不,那是添加另一个\。也许我应该在我的课堂上使用 ovverride to_json 方法或类似的方法?但无论如何,谢谢你的帮助。编辑:as_json 有效。
    【解决方案2】:

    试试这个。

    render json: { "transactions" => @user.transactions.map do |transaction|
                        JSON.parse(transaction.to_json(:include => :users))
                   end
                 }
    

    它将是一个哈希而不是字符串数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-09
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多