@huynq1303 Xem qua thì có vẻ còn nhiều vấn đề quá Mình chỉ chia sẻ vấn đề liên quan đến câu hỏi thôi nhé.
Hiện tại nếu bạn xem source html thì thì sẽ thấy fields_for sinh ra các hidden_field cho mỗi product_images. Cho nên hiện tại chỉ cần bật modal edit lên rồi ấn Save luôn thì nó cũng tạo ra hai ảnh. Lý do là bạn chưa permit :id cho nested_attributes. Sửa thành
@huynq1303 Nhìn params có thể bạn cũng thấy là khi file_field được PUT controller, thay vì nó đè file bạn mới up thì nó append thêm 1 file (trong ảnh là id 30?) vào trong product_images_attributes đúng không?
Mình lâu lắm không động vào nested_attributes kèm với view nên không chắc lắm. Bạn thử cách sau nhé
Ở form thay vì product[product_images_attributes][][image] bạn hãy thử product[product_images_attributes][0][image]. Tức là thay vì để helper chủ động chỉ định index thì mình báo là file tôi sắp up là file đầu tiên trong attributes đấy, có thể nó sẽ đè lên cái index cũ cho bạn
Như bạn nói sau này một Product sẽ có thể có nhiều ProductImage (trong model bạn cũng để là has_many) thì lúc muốn update từng cái ảnh riêng biệt có lẽ cũng cần chỉ định index đúng cho nó, hoặc làm một cách an toàn và đỡ hại não hơn là viết controller riêng cho ProductImage
P.S. Nếu cách trên không được và bạn đang làm để học Rails thì bạn share link git project của bạn đang làm cho mình được không Không thì có thời gian mình sẽ làm 1 cái tương tự, lâu rồi cũng nên cập nhật lại chút kiến thức cũ
@huynq1303 Sorry bạn mình reply chậm. Mình cũng đang nghĩ đến một vài khả năng đang biến chức năng replace ảnh của bạn thành chức năng thêm ảnh mới
Để cho rõ ràng hơn bạn cho mình hỏi
Bạn dùng chung form cho #create và #update đúng không?
Bạn nói có thể ảnh mới tức là có thêm 1 record ProductImage được sinh ra đúng không?
Bạn có thể cho mình xem đoạn products#update được không
Nếu được bạn đặt debug vào products#update (binding.pry hoặc byebug) rồi in params ra hộ mình được không.
Cho em hỏi là : public static <T> int countOccurrences(Collection<T> collection, T itemToCount) . Thì <T> là có phải là kiểu trả về không ạ, em thấy có int rồi thì tại sao còn cần <T> ạ, hay nó có nghĩ là mình có thể trả về một kiểu khác ngoài kiểu int đã định sẵn ??? em cảm ơn
Theo ví dụ trên thì searchMovie("Doctor Strange") chính là api call đấy bạn.
Nếu bạn kết hợp với retrofit thì sử dụng luôn các endpoint trong interface của retrofit
THẢO LUẬN
rảnh rỗi vào đây đọc với viết bài nhé. hehe.
=))
Chuẩn chứ còn gì nữa =))
Bài viết hay. 😀
Ý bạn include layout + code cụ thể là ntn ? 😃
cám ơn bạn đã chia sẽ
vâng em cảm ơn anh ạ
cho mình xin code với. Thanks (bow)
Em đã làm được theo cách của anh ạ.. Em cám ơn.
Có b nhé, em gái mình bị thất lạc ở Trần Duy Hưng, nhờ bác chở giúp e nó về nhà dùm
@huynq1303 Xem qua thì có vẻ còn nhiều vấn đề quá
Mình chỉ chia sẻ vấn đề liên quan đến câu hỏi thôi nhé.
Hiện tại nếu bạn xem source html thì thì sẽ thấy fields_for sinh ra các hidden_field cho mỗi product_images. Cho nên hiện tại chỉ cần bật modal edit lên rồi ấn Save luôn thì nó cũng tạo ra hai ảnh. Lý do là bạn chưa permit :id cho nested_attributes. Sửa thành
là OK vụ không bị duplicate ảnh nữa nhé. (Thực ra để như bây giờ nó sẽ nhân lên theo luỹ thừa 2
)
Chúc bạn học rails thành công 
Mình vẫn đang mở lớp dạy mà, bạn có em gái không, mình miễn học phí =))
ko chọn gì thì bảo ko chon =)))
tôi không chọn gì cả. tôi vào đây comment chỉ là do bị ép =((
vâng đây là link github của e ạ. https://github.com/kensoloko/Project_WebWatch/tree/Huy-26-04-edit-del-product
@huynq1303 Nhìn params có thể bạn cũng thấy là khi file_field được PUT controller, thay vì nó đè file bạn mới up thì nó append thêm 1 file (trong ảnh là id 30?) vào trong product_images_attributes đúng không?
Mình lâu lắm không động vào nested_attributes kèm với view nên không chắc lắm. Bạn thử cách sau nhé
Ở form thay vì
product[product_images_attributes][][image]bạn hãy thửproduct[product_images_attributes][0][image]. Tức là thay vì để helper chủ động chỉ định index thì mình báo là file tôi sắp up là file đầu tiên trong attributes đấy, có thể nó sẽ đè lên cái index cũ cho bạnNhư bạn nói sau này một Product sẽ có thể có nhiều ProductImage (trong model bạn cũng để là has_many) thì lúc muốn update từng cái ảnh riêng biệt có lẽ cũng cần chỉ định index đúng cho nó, hoặc làm một cách an toàn và đỡ hại não hơn là viết controller riêng cho ProductImage
P.S. Nếu cách trên không được và bạn đang làm để học Rails thì bạn share link git project của bạn đang làm cho mình được không
Không thì có thời gian mình sẽ làm 1 cái tương tự, lâu rồi cũng nên cập nhật lại chút kiến thức cũ 
vâng hiện giờ e đang dùng chung form cho create và update
vâng chính xác là có thêm 1 product_images được sinh ra
đây là đoạn code update của e ạ
@huynq1303 Sorry bạn mình reply chậm. Mình cũng đang nghĩ đến một vài khả năng đang biến chức năng replace ảnh của bạn thành chức năng thêm ảnh mới
Để cho rõ ràng hơn bạn cho mình hỏi
Cho em hỏi là : public static <T> int countOccurrences(Collection<T> collection, T itemToCount) . Thì <T> là có phải là kiểu trả về không ạ, em thấy có int rồi thì tại sao còn cần <T> ạ, hay nó có nghĩ là mình có thể trả về một kiểu khác ngoài kiểu int đã định sẵn ??? em cảm ơn
Theo ví dụ trên thì
searchMovie("Doctor Strange")chính là api call đấy bạn. Nếu bạn kết hợp với retrofit thì sử dụng luôn các endpoint trong interface của retrofit