更新时间:2023-12-01 13:20:22
这是一个简单的示例,显示了如何从单个页面发出多个邀请.缺少一些小细节,但可能足以提供帮助.您可以通过一些简单的jQuery从视图中添加和删除字段.该代码可以适用于任何类型的嵌套模型情况.希望能帮助到你! :)
Here's a simple example that shows how to send out multiple invites from single page. Some little details are missing but it might be enough to help. You can add and remove fields from the view via some simple jQuery. This code could be adapted to any kind of nested model situation. Hope it helps! :)
InviteController.rb
InviteController.rb
class InviteController < ApplicationController
def new
@invites = Invite.new
end
def create
@invites = User.new(params[:user]).invites
if @user.update_attributes(params[:user])
return redirect_to root_url, :notice => "Your invite(s) were successfully sent!"
else
render :action => :new
end
end
end
User.rb
class User < ActiveRecord::Base
has_many :invites
accepts_nested_attributes_for :invites
end
Invite.rb
Invite.rb
class Invite < ActiveRecord::Base
belongs_to :user
after_create :send_invite
private
def send_invite
# Send e-mail...
end
end
new.html.erb
new.html.erb
<% form_tag invites_path do %>
<%= error_messages_for :object => @user.invites %>
<ul id="invite-list">
<%= render @invites %>
</ul>
<div>
<%= submit_tag "Send Invite" %>
<%= link_to "Add Another", "#add", :id => "add-another" %>
</div>
<% end %>
_invite.html.erb
_invite.html.erb
<%= fields_for "user[invites_attributes][]", invite do |i| %>
<li>
<%= link_to("Remove", "#delete", :class => "delete-invite") %>
<%= i.label :full_name, "Full Name" %>
<%= i.text_field :full_name %>
<%= i.label :email, "Email Address" %>
<%= i.text_field :email %>
</li>
<% end %>
application.js
application.js
$(document).ready(function() {
$('a#add-another').click(function() {
$('#invite-list li:first').clone().find('input').val('')
.end().appendTo('#invite-list');
});
$('.delete-invite').live('click', function() {
if ($('#invite-list li').length > 1)
$(this).parent().remove();
else
alert('You need at least one invite.')
});
});