Rails:在响应

时间:2016-04-03 09:56:45

标签: ruby-on-rails ruby json

我有三个模型如下:

 #Product Model
 class Product < ActiveRecord::Base
        belongs_to :user
        has_one :address
        validates :title, :description, :user_id, presence: true
        validates :product_type, numericality:{:greater_than => 0, :less_than_or_equal_to => 2}, presence: true
        accepts_nested_attributes_for :address
    end




    #Address Model
    class Address < ActiveRecord::Base
        belongs_to :city
        belongs_to :product

        def related_city
            city = address.city
        end
    end

#City Model
class City < ActiveRecord::Base
    has_many :addresses
end

我正在提取产品但我需要在我的JSON响应中包含关联属性,除了少数属性。 以下是我到目前为止所做的事情:

def show
        product = Product.find(params[:id])
        render json: product.to_json(:include => { :address => {
                             :include => { :city => {
                                             :only => :name } },
                             },:user =>{:only=>{:first_name}}}), status: 200
    end

这给了我一个语法错误。如果我删除用户它工作正常,但我也需要用户的名字作为回应。此外,我将如何使用ruby的新哈希语法编写上述代码?

2 个答案:

答案 0 :(得分:0)

问题出在show方法的第五行,你有一个用花括号包围的逗号。这是hash sans逗号,用新语法:

def show
  product = Product.find(params[:id])
  render json: product.to_json(include: { address: {
                     include: { city: {
                                     only: :name }}}},
                     user: {only:{:first_name}}), status:200
end

答案 1 :(得分:0)

您可以使用此gem解决该问题:Active Model Serializers。它将允许您为每个模型创建序列化程序,并使用它们根据需要呈现格式化的JSON。看看,让我知道。