2016-04-03 3 views
0

でネストされた連想属性などは、私は三つのモデルを持っている:のRails:次のように応答

#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

新しい構文を使用すると、結果的に間違ってしまうことが少なくなります。 ':include => {...}'は 'include:{...}'となり、読みやすくなりがちです。古いスタイルを使用する唯一の理由は、恐ろしい古い1.8バージョンを使用する理由がまだある場合です。 – tadman

答えて

0

あなたはこの宝石を使用して、その問題を解決することができます:Active Model Serializers。各モデルのシリアライザを作成し、必要に応じて書式設定されたJSONをレンダリングするために使用します。見てみよう。

0

問題は、showメソッドの5行目に、中括弧で囲まれたカンマがあります。ここでは、ハッシュサンセリフのコンマは新しい構文では、次のとおりです。

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 
+0

私は上記のコードを試しましたが、このエラーが発生しています: "/home/paras/rails/lost_and_found/app/controllers/api/v1/products_controller.rb:31:構文エラー、予期しない '}'、予想=ユーザー:{:{:first_name}}})、ステータス:200^" – Paras

+0

ああ、おそらく6行目から5行目に移動する必要があります。私はハッシュを編集しました。 – trosborn

+0

運がありません。次のエラーが表示される:/home/paras/rails/lost_and_found/app/controllers/api/v1/products_controller.rb:31:構文エラー、予期しない '}'、予想=> user:{のみ:{:first_name}} )、ステータス:200^ #31ユーザー:{のみ:{:first_name}})、ステータス:200 – Paras