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