Rails嵌套表单属性构建

时间:2013-03-20 05:22:38

标签: ruby-on-rails nested-attributes

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

  • 我有一个包含fields_for成员资格的嵌套表单,以便创建成员资格。 See screenshot of form
  • 保存表单后,成员资格模型将运行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

参与者模型 - 这实际上是成员列表团队的成员,但是当用户进入团队时,他们可以指定昵称,这可能会改变团队。

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

1 个答案:

答案 0 :(得分:0)

我认为这是一个验证错误。尝试删除
验证:entrant_id,存在:真实 来自会员模式。