0

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

基本设置是:一个 Comp 有很多 Teams,一个 Team 有很多 Member。创建新团队时,创建的第一个成员应该是团队的秘书(这意味着成员表中的秘书标志字段应该设置为 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

团队.rb:

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

成员.rb:

 belongs_to :team
4

1 回答 1

0

我想出的解决方案非常基本。在我的创建操作中,我不小心放了:

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

什么时候应该是:

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

我仍然不明白为什么会创建 2 个相同的记录,但它现在可以工作了。

于 2012-11-08T16:53:42.263 回答