Я пишу (текстовое) приложение для обмена сообщениями с Rails. Я использую вложенные_формы, чтобы вы могли отправить сообщение нескольким людям.
В контроллере я создаю экземпляр нового объекта Message, затем для каждого члена создаю объект Recipient (дочерний элемент Message). В форме я показываю флажок рядом с каждым получателем. Я хочу, чтобы у нового объекта Message были только получатели, рядом с которыми есть чеки. Это не работает.
Таким образом, к моменту отображения формы объекты Recipient создаются для всех членов. Другими словами, по умолчанию сообщение отправляется каждому участнику, если не указано иное. Но я хочу использовать форму, чтобы пользователь мог указать, кому он хочет, чтобы сообщения отправлялись
Вот мои модели:
class Message < ActiveRecord::Base
has_many :recipients
accepts_nested_attributes_for :recipients
#columns: body:string, from:string, from_member_id:integer
end
class Member < ActiveRecord::Base
#columns phone:string, name:string
end
class Recipient < ActiveRecord::Base
belongs_to :message
belongs_to :member
#columns: member_id:integer, message_id:integer
end
messages_controller.rb:
def new
@message = Message.new
@members = Member.all
@members.each do |member|
@message.recipients << Recipient.new(:member_id => member.id)
end
end
def create
@message = Message.new(params[:message])
redirect_to '/somewhere'
end
...
А вот моя форма для Message
(app/views/message/new/html.erb)
<%= form_for(@message) do |f| %>
<% if @message.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@message.errors.count, "error") %> prohibited this message from being saved:</h2>
<ul>
<% @message.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<%= f.fields_for :recipients do |builder| %>
<div class="field">
<input type="checkbox" value="<%= builder.object.member_id %>" name="recipients[id]" />
/*WHAT GOES ^^^HERE^^^? */
<%= builder.object.member.name %>
</div>
<% end %>
<div class="field">
<%= f.label :body %><br />
<%= f.text_field :body %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
Закомментированная строка в форме - это то место, где у меня возникли проблемы. Кроме того, мне может понадобиться изменить код в MessagesController#create, но я не уверен, с чего начать.