我有三个模型如下:
#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的新哈希语法编写上述代码?
答案 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。看看,让我知道。