2012-08-13 28 views
0

我有点不确定如何存储来自collection_tag的数据。如何存储选择信息

在这里,我对

Customer   GenderManager  Genders 
Id    Id     Id 
First   Customer_id  Description 
Last    Gender_id 
Email   Created_at 
Password 

这里的关系

Customer::class 
    has_many :gender_managers 
    accepts_nested_attributes_for :gender_managers, allow_destroy: :true 
Gender::class 
    has_many :gender_managers 
GenderManagers:class 
    belongs_to :customer_id 
    belongs_to :gender_id 

的形式我有工作模式目前他已经跟随

<%= form_for @customer do |f| %> 
    <div class="customer_edit_error_message"> 
      <%= render 'shared/error_messages' %> 
    </div> 
    <fieldset> 
    <div class="customer_edit_name"> 
      <%= f.label :first_name %> 
      <%= f.text_field :first_name %> 
    </div> 

    <div class="customer_edit_middle_name"> 
      <%= f.label :middle_name %> 
      <%= f.text_field :middle_name %> 
    </div> 

    <div class="customer_edit_last_name"> 
      <%= f.label :last_name %> 
      <%= f.text_field :last_name %> 
    </div> 

    <div class="customer_edit_gender"> 
    <%= f.collection_select(:customer, :id, Gender.all, :id, :description) %> 
    </div> 
    <div class="customer_edit_button"> 
      <%= f.submit "Save changes", class: "button_accept" %> 
    </div> 
    <% end %> 

在customerController不知道如果我必须做一点事。我知道它不对,它给我错误。它的形式,让我担心在选择像

在此先感谢。

+0

您的查看代码建议了一种不同的关系,即“客户belongs_to:性别”。你的意思是你想存储一个客户是男性还是女性? – Mischa 2012-08-13 14:53:34

+0

是的,但也许跟踪的变化:D – Jseb 2012-08-13 14:57:05

+0

你是什么意思“跟踪变化”?有人改变性别是非常罕见的,你为什么要跟踪这一点。我不认为你需要'GenderManager',说实话你也不需要'Gender'。只需在您的“客户”模型中添加字段“性别”即可完成。总会有男性和女性,不需要将它们存储在桌子上。 – Mischa 2012-08-13 15:01:43

回答

0

我建议您为您的Customer模型添加属性gender。如果你想保留的变化轨迹,你可以在Customer创建GenderHistory模型,做这样的事情:

class Customer < ActiveRecord::Base 
    has_many :gender_histories 
    before_update :track_gender 

    def track_gender 
    self.gender_histories.create(:gender => self.gender) if self.gender_changed? 
    end 
end 

GendersGenderManager模型是没有必要的。