Tôi có một câu lệnh tạo cho một số kiểu máy, nhưng nó tạo ra một bản ghi trong bảng nối bất kể bản ghi đã tồn tại chưa.Trong Rails, cách tốt nhất để cập nhật một bản ghi hoặc tạo một bản ghi mới nếu nó không tồn tại là gì?
Đây là những gì mã của tôi trông giống như:
@user = User.find(current_user)
@event = Event.find(params[:id])
for interest in @event.interests
@user.choices.create(:interest => interest, :score => 4)
end
Vấn đề là nó tạo ra các hồ sơ không có vấn đề gì. Tôi muốn nó tạo ra một kỷ lục chỉ khi không có hồ sơ đã tồn tại; nếu một bản ghi không tồn tại, tôi muốn nó lấy thuộc tính của bản ghi được tìm thấy và cộng hoặc trừ 1.
Tôi đã nhìn xung quanh đã thấy một cái gì đó gọi là find_or_create_by
. Điều này làm gì khi tìm thấy một bản ghi? Tôi muốn nó lấy thuộc tính hiện tại :score
và thêm 1.
Có thể tìm hoặc tạo bởi id
? Tôi không chắc chắn thuộc tính nào tôi sẽ tìm thấy, vì mô hình tôi đang xem là mô hình tham gia chỉ có id
khóa ngoại và thuộc tính điểm.
tôi đã cố gắng
@user.choices.find_or_create_by_user(:user => @user.id, :interest => interest, :score => 4)
nhưng có
phương pháp xác định
find_by_user
Tôi nên làm gì?
là CURRENT_USER đã một thể hiện của mô hình tài khoản? Nếu vậy, bạn không cần phải tìm lại nó và chỉ có thể sử dụng 'current_user' thay cho' @user = ... '. –