【发布时间】:2010-10-27 13:54:52
【问题描述】:
我正在尝试运行它..
- f.fields_for :referrals do |qf|
但我也想通过@organization.referrals.select{|ref|ref.new_record?}。这样传递的表单完全是新对象,而不是旧对象。
我已经尝试过这样做..
- f.fields_for :referrals do |qf|
- if qf.object.new_record?
= render :partial => 'referral_fields', :locals => {:qf => qf}
这使它在视图中正确显示,但参数仍填充有每个先前创建的嵌套对象。
这让我相信我需要在 fields_for 语句本身中传递此选项。
我也试过这个:
- f.fields_for @organization.referrals.select{|ref|ref.new_record?} do |qf|
= render :partial => 'referral_fields', :locals => {:qf => qf}
还有这个:
- f.fields_for :referrals, @organization.referrals.select{|ref|ref.new_record?} do |qf|
= render :partial => 'referral_fields', :locals => {:qf => qf}
第一个示例将显示并且只允许传递一个对象。我的表单允许动态数量的重复嵌套表单。
第二个将显示并传递所有嵌套对象
应用信息
#organization.rb
has_many :referrals
accepts_nested_attributes_for :referrals, :reject_if => proc { |attributes| attributes.all? { |k, v| v.blank? } }, :allow_destroy => true
#referral.rb
belongs_to :organization
#referrals_controller.rb
def new
2.times { @organization.referrals.build }
....
def create
@referral = Referral.new(params[:referral])
if @referral.valid? && @organization.referrals << @referral
flash[:notice] = "Referrals saved."
redirect_to new_organization_referrals_path(@organization)
else
render :action => :new, :layout => 'manage'
end
end
【问题讨论】:
标签: ruby-on-rails forms nested-forms