我有一个Rails 4应用,模型Challenge
和ChallengeList
。这是一个多对多的关系,所以我也有一个模型ChallengeListsChallenge
的连接表。我定义了最后一个模型,因为我希望我的ChallengeLists
成为有序列表,因此用它来利用acts_as_list
:
class ChallengeList < ActiveRecord::Base
has_many :challenge_lists_challenges, :dependent => :destroy
has_many :challenges, :through => :challenge_lists_challenges
accepts_nested_attributes_for :challenges
end
class ChallengeListsChallenge < ActiveRecord::Base
default_scope :order => 'position'
belongs_to :challenge
belongs_to :challenge_list
acts_as_list :scope => :challenge_list
end
这很好用。
在我的HTML中,我有一个表单,允许用户定义新的ChallengeList
。它有Challenges
的嵌套表单:
= f.fields_for :challenges do |challenge_builder|
.field
= challenge_builder.text_field :description
但我也希望用户能够改变位置。所以我觉得我很聪明,为职位添加一个字段:
= challenge_builder.text_field :position
当然,这不起作用,因为'position'是在连接项上设置的,而不是Challenge
项。
拥有ChallengeListsChallenges
的嵌套表单可以让我访问该位置,但不是很酷,因为:
ChallengeList
ID(这不是不可克服的,但也不是很漂亮)Challenge
ids 那我该怎么办?
答案 0 :(得分:0)
设置模型依赖关系,如下所示:
class ChallengeList < ActiveRecord::Base
has_many :challenge_lists_challenges, :dependent => :destroy
has_many :challenges, :through => :challenge_lists_challenges
accepts_nested_attributes_for :challenge_lists
end
class ChallengeListsChallenge < ActiveRecord::Base
default_scope :order => 'position'
belongs_to :challenge
belongs_to :challenge_list
acts_as_list :scope => :challenge_list
accepts_nested_attributes_for :challenges
end
这是一个双重嵌套的形式:
= form_for @challenge_list do |f|
= f.fields_for :challenge_lists_challenges do |links_form|
.field
= links_form.number_field :position
%br/
= links_form.fields_for :challenge do |challenge_form|
.field
= challenge_form.text_field :description
= challenge_form.text_field :id
它应该有用。