Tôi đang gặp sự cố trong ứng dụng Rails 3.2 của mình, trong đó thuộc tính ảo được gửi một cách an toàn qua JSON không nằm đúng vị trí trong hàm băm params. Vâng, đó không phải là nơi tôi mong đợi. Nó vẫn còn để được nhìn thấy nếu kỳ vọng của tôi là chính xác. :)Thuộc tính ảo không được chuyển sang mẫu băm bên trong các tham số
Tôi có một mô hình sử dụng các mô hình thuộc tính ảo chuẩn, như thế này:
class Track < ActiveRecord::Base
def rating
# get logic removed for brevity
end
def rating=(value)
# set logic
end
def as_json(options={}) # so my method is in the JSON when I use respond_with/to_json
super(options.merge(methods: [:rating]))
end
end
Các JSON gửi đến bộ điều khiển của tôi trông như thế này:
{"id":1,"name":"Icarus - Main Theme 2","rating":2}
Để được rõ ràng, tên và id không phải là ảo, xếp hạng là.
tôi kết thúc với điều này trong băm params, sau khi đường ray hiện magic của nó:
{"id"=>"1", "name"=>"Icarus - Main Theme 2", "rating"=>2, "track"=>{"id"=>"1", "name"=>"Icarus - Main Theme 2"}}
Như bạn thấy, id và tên làm cho nó vào lồng nhau: băm theo dõi, nhưng giá thì không. Đây có phải là hành vi mong đợi không? Nó phá vỡ thực tế tiêu chuẩn (phần nào) của việc sử dụng băm lồng nhau trong bộ điều khiển vì băm lồng nhau không chứa tất cả các thông số tôi cần.
Track.update(params[:id], params[:track]) # :track is missing rating
Cảm ơn sự giúp đỡ của bạn!
Bạn có thể dán biểu mẫu đang gửi, có vẻ như nó không được sắp xếp đúng theo dõi – MatthewFord