为什么fields_for在表单提交时创建2个相同的记录而不是1?

时间:2012-11-06 01:46:20

标签: ruby-on-rails ruby-on-rails-3 forms

当我提交此表单时,它在Members表中创建了2个相同的记录(表单的fields_for部分)。请帮助我理解为什么会这样。

基本设置是:Comp有很多团队,团队有很多成员。创建新团队时,创建的第一个成员应该是团队的秘书(这意味着成员表中的secretary_flag字段应设置为TRUE。)下面的表单应该创建一个新团队,创建第一个团队成员,以及将该团队成员标记为秘书。

控制器:

def new
  @comp = Comp.find(params[:comp_id])    
  @team = @comp.teams.new
  @team.members.build  
end

def create
  @comp = Comp.find(params[:comp_id])
  @team = @comp.teams.create(params[:team])
  if @team.update_attributes(params[:team])
      flash[:success] = "Team added successfully."
      redirect_to new_comp_team_member_path(@comp,@team)
  else
      render 'new' 
  end
end

表单视图:

<%= form_for [@comp,@team] do |builder| %>
    <%= builder.label :team_name, "Team name" %>
    <%= builder.text_field :team_name %>        
    <%= builder.fields_for :members do |f| %>
        <%= f.label :member_email, "Email address of team secretary" %>
        <%= f.text_field :member_email %> 
        <%= f.hidden_field :secretary_flag, :value => 1 %>
    <% end %>

<%= builder.submit "Create new team" %> 

<% end %> 

在我的路线中:

resources :comps do
    resources :teams do 
        resources :members
    end 
end

在我的模特中:

comp.rb:

attr_accessible :teams_attributes
has_many :teams, :dependent => :destroy
accepts_nested_attributes_for :teams, :allow_destroy => :true

team.rb:

attr_accessible :members_attributes
belongs_to :comp
has_many :members
accepts_nested_attributes_for :members

member.rb:

 belongs_to :team

1 个答案:

答案 0 :(得分:0)

我发现的解决方案非常基础。在我的创作中我不小心把:

if @team.update_attributes(params[:team])

应该是什么时候:

if @team.save(params[:team])

我仍然不明白为什么会创建2个相同的记录,但它现在有效。