2015-08-17 30 views
2
保存新值

我的用戶模型中包含的值的東西,如:使用hstore和用戶

姓名,電子郵件,電話,批准等。

我的工作項目的範圍包括自定義用戶設置,因此我使用hstore(我不想創建一個user_settings表)。

在用戶編輯視圖中,我想創建一個名爲'colors'的複選框,並檢查複選框是否被選中,以確定是否爲用戶設置了該設置。

我已經設置hstore如下:

class AddHstore < ActiveRecord::Migration 
    def up 
    enable_extension :hstore 
    end 

    def down 
    disable_extension :hstore 
    end 
end 

更新了用戶模型如下:

class AddSettingsToUser < ActiveRecord::Migration 
    def up 
    add_column :users, :settings, :hstore 
    end 

    def down 
    remove_column :users, :settings 
    end 
end 

這主要是我的用戶編輯觀點:

<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put, :class => "form-horizontal user" }) do |f| %> 
    <%= devise_error_messages! %> 

     <div class="field"> 
     <%= f.label :name %><br /> 
     <%= f.text_field :name, autofocus: true %> 
     </div> 

     <div class="field"> 
     <%= f.label :email %><br /> 
     <%= f.email_field :email %> 
     </div> 

     <div class="field"> 
     <%= f.label :phone_number %><br /> 
     <%= f.text_field :phone_number %> 
     </div> 

     <div class="actions"> 
     <%= f.submit 'Update', :class => 'btn btn-primary' %> 
     </div> 

<% end %> 

在這一點我不確定如何真正實現這個功能。用戶編輯頁面允許用戶更改他們的姓名,電話和其他值,但是如何爲hstore settings添加新值?

+0

這很容易一些示例數據,,您可以添加新的價值hstore和更新 –

+1

檢查這個http://nandovieira.com/using-postgresql-and-hstore-with -rails –

回答

3

form_for從內部要在其中創建用戶,添加您的hstore的Fileds象下面這樣:

<%= form_for resource, ...do |f| %> 
    #... 
    <%= f.fields_for :settings do |settings| %> 
    <%= settings.text_field :field1 %> 
    <%= settings.text_field :field2 %> 
    <% end %> 
    #.... 
<% end %> 

然後更新像下面控制器強參數的方法來使這些新的領域:

def user_params 
     params.require(:user) 
      .permit(
         :name, 
         :email, 
         settings: [ :field1, :field2 ] 
        ) 
    end 

現在,你完成了。打開你的軌道控制檯,並嘗試像

User.create(
      settings: { field1: 'data1', field2: 'data2' } 
      ) 
+0

這很棒,效果很好,但是我無法從用戶編輯視圖更新用戶。更新成功,但該用戶的'settings'的值返回爲'nil'。 – captainrad

+0

@captainrad據我所知,你的更新也在工作..對嗎? :)所以刪除評論:p –

+0

正確得到它所有的工作再次感謝! – captainrad