7

Mam na myśli funkcję magazynu danych Rails 3.2, w której istnieje opcja przechowywania magazynów kluczy w polu tekstowym, nawet jeśli korzystasz z relacyjnej bazy danych, takiej jak MySQL ... działa poprawnie podczas programowej manipulacji pola.Czy istnieją sprawdzone metody/spójny sposób aktualizowania pola bazy danych zawierającego składowanie klucz-wartość mieszania?

Ale jaka jest dokumentacja, aby zaktualizować te pola z formularza RESTful HTML? Czy jest to coś, co wcale nie jest zalecane? Czyli lepszym rozwiązaniem byłoby przejście na NoSQL?

Odpowiedz

0

Jeśli rozumiem pytanie, myślę, że po prostu trzeba zadeklarować nazwę pola gospodarstwa sklep, a związane akcesorów (nieruchomości) w modelu, jak

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

w którym momencie pole współpracuje z AR i AREL tak jak każdy inny, nawet z formularzami.

Tu jest bardzo mało magii. Pole zawiera skrót wartości; deklaracja sklepu pozwala Railsom wiedzieć, że możesz odwoływać się do nich jak coś. weight lub something.color, czy to czytając, czy pisząc. Prosty i zgrabny. Klasyczny DHH.

0

Chociaż pytanie jest dość stare, może ktoś inny uzna to za przydatne, a także całkiem nowe w rubinach i szynach, więc może być lepszy sposób na zrobienie tego.

W modelu

#user.rb 

attr_accessible :preferences 
store :preferences 

następnie w formie częściowej:

#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 %> 

Teraz, aby dodać jakieś dodatkowe pola z ive forma utworzona 2 attr_accessor w modelu

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

następnie dodano 2 nowe pola w formularzu

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

na moim kontrolera zrobiłem to sprawdzić obecność nowych złóż, a następnie scalić wcześniejsze wartości w preferencjach na nowe, tak funkcję:

#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 
... 

zrobić, że ja go zwrócić i przekazać go do update_attributes, mam nadzieję, że pomogło!

Powiązane problemy