Я пытаюсь создать вложенные формы, в которых пользователи могут добавлять один или несколько временных интервалов для каждого создаваемого приглашения.
в представлении Invitations
у меня есть _form.html.erb
:
<%= simple_form_for invitation, id: "invitation_form", :remote => true do |f| %>
<div class="col-md-12">
<%= f.error_notification %>
<%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>
<%= f.collection_select(:guest_id, User.all, :id, :full_name, {}, class: "selectpicker", title: "Choose recipient", multiple: true) %>
<br>
<br>
</div>
<br><br>
<div class="col-md-12">
<%= f.collection_select(:type_of_event, @type_evenement, :id, :type_name, {:include_blank => true}, class: "selectpicker", title: "Type", multiple: false) %>
<br>
</div>
<div class="col-md-12">
<br>
<%= f.collection_select(:event_id, @events_list, :id, :title, {:include_blank => true}, class: "selectpicker", title: "Related event (Optional)", multiple: false) %>
<br>
<br>
<%= f.input :title, placeholder: "Title", label: false %>
<%= f.text_area :memo, placeholder: "Start writing", class: "form form-control", rows: 10 %>
<div class="fields">
<%= f.simple_fields_for :invsession do |builder| %>
<%= render 'invitations/invsession_fields', f: builder %>
<% end %>
</div>
<div class="form-actions">
<br>
<%= f.button :submit, class: "btn btn-primary" %>
</div>
</div>
<% end %>
в том же виде приглашения, у меня есть частичное _invsession_fields.html.erb
<tr>
<td>
<%= f.input_field :_destroy, as: :hidden %>
<%= link_to 'Delete', '#', class: 'remove_record' %>
</td>
<td>
<div class='input-group date' id='datetimepicker2'>
<%= f.text_field :start, :class => "form-control" %>
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span><br>
</div>
</td>
<td>
<div class='input-group date' id='datetimepicker3'>
<%= f.text_field :end, :class => "form-control" %>
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</td>
</tr>
по моему Invitation controller
:
def new
@type_evenement = TypeEvenement.all
@invitation = current_user.invitations.build(invitation_params)
@invitation.invsessions.build
end
def invitation_params
params.require(:invitation).permit(:user_id, :guest_id, :event_id, :start, :title, :type_of_event,:memo, :seen, :deleted, :modified, invsessions_attributes: Invsession.attribute_names.map(&:to_sym).push(:_destroy))
end
Модель моего приглашения:
class Invitation < ApplicationRecord
belongs_to :user
has_many :invsessions, dependent: :destroy
accepts_nested_attributes_for :invsessions, allow_destroy: true
end
и модель моего вторжения:
class Invsession < ApplicationRecord
belongs_to :invitation, optional: true
belongs_to :user
end
Дисплей работает хорошо, но когда я нажимаю сохранить, он сохраняет только новое приглашение, но не новый элемент вторжения. У меня есть следующее:
Processing by InvitationsController#create as JS
Parameters: {"utf8"=>"✓", "invitation"=>{"guest_id"=>["", "1"], "type_of_event"=>"2", "event_id"=>"108", "title"=>"ssss", "memo"=>"ssss", "invsession"=>{"_destroy"=>"", "start"=>"2018-11-02 04:15 am +08:00", "end"=>"2018-11-02 04:15 am +08:00"}}, "commit"=>"Create Invitation", "locale"=>"en-us"}
User Load (0.6ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 1], ["LIMIT", 1]]
Unpermitted parameters: :guest_id, :invsession
1
(0.1ms) begin transaction
SQL (23.0ms) INSERT INTO "invitations" ("user_id", "guest_id", "event_id", "title", "memo", "created_at", "updated_at", "type_of_event") VALUES (?, ?, ?, ?, ?, ?, ?, ?) [["user_id", 1], ["guest_id", 1], ["event_id", 108], ["title", "ssss"], ["memo", "ssss"], ["created_at", "2018-11-02 08:15:37.916159"], ["updated_at", "2018-11-02 08:15:37.916159"], ["type_of_event", 2]]
(25.6ms) commit transaction
(0.1ms) begin transaction
с этой строчкой, которую я не знаю, как исправить Unpermitted parameters: :guest_id, :invsession
Что-то нужно изменить, чтобы это работало? Я следую учебному пособию по дрифтингу ruby (070), которое кажется довольно простым.