7

Tôi đang đề cập đến tính năng Lưu trữ dữ liệu của Rails 3.2, trong đó có tùy chọn lưu trữ các kho khóa giá trị trong trường văn bản, ngay cả khi bạn đang sử dụng cơ sở dữ liệu quan hệ như MySQL ... nó hoạt động tốt khi thao tác theo chương trình nhữn cánh đồng.Có cách nào hay nhất/mạch lạc để cập nhật trường cơ sở dữ liệu có chứa kho khóa-giá trị băm không?

Nhưng tài liệu nào có sẵn để cập nhật các trường này từ biểu mẫu HTML RESTful? Hay đây là điều gì đó không được khuyến khích? Đó là, giải pháp tốt hơn sẽ là đi đến NoSQL?

Trả lời

0

Nếu tôi hiểu câu hỏi, tôi nghĩ rằng bạn chỉ cần khai báo tên trường tổ chức các cửa hàng, và bộ truy xuất liên quan (tài sản) trong mô hình, giống như

store :settings, accessors: [ :weight, :length, :color ] 

điểm mà tại đó lĩnh vực này làm việc với AR và AREL giống như bất kỳ người nào khác, ngay cả với các hình thức.

Có rất ít phép thuật ở đây. Trường giữ một giá trị băm; khai báo cửa hàng cho phép Rails biết rằng bạn có thể tham khảo chúng như something.weight hoặc something.color, cho dù đọc hay viết. Đơn giản và bóng bẩy. DHH cổ điển.

0

mặc dù câu hỏi là khá cũ ai đó có thể thấy nó hữu ích, cũng khá mới trong ruby ​​và đường ray để có thể có một cách tốt hơn để làm điều này.

Trong mô hình:

#user.rb 

attr_accessible :preferences 
store :preferences 

sau đó dưới dạng một phần:

#views/users/_form.rb 

<% @user.preferences.each do |k, v| %> 
    <% form.fields_for :preferences, @user.preferences[k] do |p| %> 
     <div class="field"> 
     <%= p.label k %> 
     <br/> 
     <%= p.text_field k, :value => v %> 
     </div> 
    <% end %> 
<% end %> 

Bây giờ thêm một số trường bổ sung từ hình thức ive tạo 2 attr_accessor trong mô hình:

attr_accessible ... , :new_pref_key, :new_pref_val 
attr_accessor ... , :new_pref_key, :new_pref_val 

sau đó thêm 2 trường mới vào biểu mẫu

<%= f.label :new_pref_key %> 
<%= f.text_field :new_pref_key %> 
<%= f.label :new_pref_val %> 
<%= f.text_field :new_pref_val %> 

trên bộ điều khiển của tôi làm một chức năng kiểm tra sự hiện diện của các lĩnh vực mới và sau đó hợp nhất các giá trị trước của prefs với những cái mới, như thế này:

#users_controller.rb 
... 
new_key = params[:user][:preferences][:new_pref_key] 
new_val = params[:user][:preferences][:new_pref_val] 
new_preference = { 
    new_key => new_val 
} 
current_params = params[:user][:preferences].merge! new_preference 
... 

làm điều đó tôi trở về nó và chuyển nó đến update_attributes, hy vọng nó đã giúp!