Tek bir sayfadan birden çok davetin nasıl gönderileceğini gösteren basit bir örnek. Bazı küçük detaylar eksik ama yardım etmek için yeterli olabilir. Bazı basit jQuery'leri kullanarak görünümden alan ekleyebilir ve kaldırabilirsiniz. Bu kod, herhangi bir iç içe geçmiş model durumuna adapte edilebilir. Umarım yardımcı olur! :)
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
class Invite < ActiveRecord::Base
belongs_to :user
after_create :send_invite
private
def send_invite
# Send e-mail...
end
end
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
<%= 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 %>
$(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.')
});
});
sen işe yaramadı nasıl bir açıklama sağlayabilir application.js? Kodu belirlemeye yönlendiren davranış neydi? –
3.times {@ project.tasks.build} görünümümdeki kodla bile herhangi bir etki yaratmıyor gibi görünmüyor – Elliot