2017-06-19 41 views
0

我是rails新手,並在最近2天內急於加載。 我有兩個模型CarImagesCar has_many :images關聯。並且我製作了一個api,用它們的圖像返回json數組汽車。我想要單個圖像而不是來自關聯的所有圖像。 我使用像:從has_many獲取單個記錄使用包含在內的熱切加載

Car.where(:company=>"BMW").as_json(:include=> {:images}) 

這將返回所有的汽車行駛的所有圖像。 我希望所有的汽車都使用他們的單幅圖像,而不是所有的圖像陣列。

+0

添加在'Car'模型相互關聯起來:'HAS_ONE:image'那麼你可以做:'Car.where (:company =>「BMW」)。as_json(:include => {:image})' – Surya

+0

@Nitisha - 你想要哪張圖片:第一張? – BKSpurgeon

+0

也許爲定義主圖像的「圖像」添加一個標誌,並通過驗證將其限制爲一個。 – engineersmnky

回答

2

您應該添加has_one :image, -> { order(updated_at: :desc) }Car模型。這將爲該關聯定義一個default_scope

然後,你可以得到所有汽車行駛每車只有最後一個更新的圖像:

Car.where(company: 'BMW').as_json(include: [:image])

+1

我不認爲'default_scope'一般是個好主意。 [首先](http://www.ombulabs.com/blog/ruby/rails/best-practices/why-using-default-scope-is-a-bad-idea.html)和[second](https:/ /rails-bestpractices.com/posts/2013/06/15/default_scope-is-evil/)鏈接來解釋爲什麼 –

+0

@MartinZinovsky你混淆了這一點。您的鏈接針對整個模型討論'default_scope'。我的方法只是將它添加到關聯中。 – DjezzzL

+0

爲has_many:images和has_many:image?這樣的圖像定義兩種不同的關係是好的嗎? – Nitisha

0

這取決於你需要什麼。

  1. 如果你需要首先,請寫信至:Car.where(company: "BMW").first
  2. 如果需要最後,請寫信至:Car.where(company: "BMW").last

是不是夠你?

如果你有has_many關聯,你必須選擇你需要的記錄(也許添加一些標誌)。沒有這個,你會從所有關聯對象收集。

還有一個是更好地使用where(company: "BMW")where(:company => "BMW")

+0

您是否看過我的問題?我認爲不是根據您的回答,這不是一個很好的技巧來寫任何東西來增加upvotes。有意義的答案會自動由用戶upvote。 – Nitisha

相關問題