3

我很难理解如何处理我拥有的嵌套表单。用户将登录应用程序,单击“创建团队”,此页面将允许用户输入团队名称和团队成员列表。(有效地创建团队成员列表)。

  • 我有一个包含fields_for成员资格的嵌套表单,以便创建成员资格。见表格截图
  • 保存表单后,成员模型运行Entrant.find_or_creates_by_name以创建参赛者。
  • 我遇到的问题是在创建时我收到错误消息:
    • 成员资格团队不能为空

如何防止这种情况发生并允许用户添加参赛者/确保正确创建会员资格?

抱歉,如果这个问题已经得到解答,(似乎有很多关于 has_many 的主题通过嵌套资源,但我找不到处理我的具体问题(我可能/似乎不清楚)


我的创建操作目前是标准的嵌套表单操作,如下所示:

def create
  @user = current_user
  @team = @user.teams.build(params[:team])
  if @team.save
    redirect_to(team_url(@team), :notice => "Team was successfully saved")
  else
    render :action => "new"
  end
end

我有以下型号:

用户模型

class User < ActiveRecord::Base
  has_many :teams
end

团队模型

class Team < ActiveRecord::Base
  belongs_to :user
  has_many :memberships
  has_many :entrants, :through => :memberships

  attr_accessible :name, :team_type, :website, :memberships_attributes
  accepts_nested_attributes_for :memberships, allow_destroy: true
end

会员模式

class Membership < ActiveRecord::Base
  belongs_to :team
  belongs_to :entrant

  validates :team_id, presence: true
  validates :entrant_id, presence: true

  attr_accessor :entrant_name
  attr_accessible :entrant_name 

  def entrant_name
    entrant && entrant.name
  end

  def entrant_name=(name)
    self.entrant = Entrant.find_or_create_by_name(name) unless name.blank?
  end

end

Entrants Model - 这实际上是成员列表的团队成员,但是当用户进入团队时,他们可以指定可能在团队之间更改的昵称。

class Entrant < ActiveRecord::Base
  attr_accessible :name
  has_many :memberships
  has_many :teams, :through => :memberships
end
4

1 回答 1

0

我认为这是一个验证错误。尝试 从会员模型中删除
validates :entrant_id, presence: true 。

于 2013-03-20T05:41:56.277 回答