Ruby Unpermitted параметр:: event_log для вложенных атрибутов - PullRequest
0 голосов
/ 27 января 2019

У меня есть event_log, на котором я пытаюсь обновить статус при отправке формы для event. Когда я пытаюсь передать его в форме, он создает event, но в консоли отображается Unpermitted parameter: :event_log. Соответствующий код приведен ниже. Если требуется какой-либо дополнительный код, пожалуйста, сообщите мне.

_event_accept_form.html.erb

<%= form_for :event, url: events_path do |f| %>
  <%= f.hidden_field :user_id, :value => current_user.id %>
  <%= f.hidden_field :title, :value => @event_logs.event.title %>
  <%= f.hidden_field :description, :value => @event_logs.event.description %>
  <%= f.hidden_field :start_time, :value => @event_logs.event.start_time %>
  <%= f.hidden_field :end_time, :value => @event_logs.event.end_time %>
  <%= f.hidden_field :sender_id, :value => @event_logs.user_id %>

  <%= f.fields_for @event_logs do |event_log| %>
    <%= event_log.hidden_field :status, :value => :event_accept %> 
  <% end %>

  <%= f.submit 'Accept', class: 'btn btn-success' %>
<% end %>

event.rb

class Event < ApplicationRecord
  belongs_to :user

  validates_presence_of :title, :description, :start_time, :end_time, :user_id

  has_many  :event_logs, dependent: :destroy
  accepts_nested_attributes_for :event_logs

end

event_controller.rb ...

def event_params
  params.require(:event).permit(:title, :description, :start_time, :end_time, :user_id, :sender_id, { event_logs_attributes: [:id, :status] })
end

event_log_controller.rb

def show
    @event = Event.new 
    @event_logs = EventLog.find(params[:id])
    @invitee = User.find(@event_logs.invitee_id)
end

Ошибка на консоли

Started POST "/events" for 127.0.0.1 at 2019-01-27 18:37:25 -0600
Processing by EventsController#create as HTML
  Parameters {"utf8"=> "✓"," authenticity_token" =>"BRqfTU2Rya8yKS// 
Tp2zp6HV6RSD1b82w+5ng/ lzv15Hs/q35lDxNZtxy0yXBaSyPzKeExJpYjBV/DfmwfnK3w==", 
"event"=>{"user_id"=>"4", "title"=>"another 2", "description"=>"ihihi", 
"start_time"=>"2019-01-22 01:41:00 UTC", "end_time"=>"2019-01-22 03:41:00 UTC", 
"sender_id"=>"2", "event_log"=>{"status"=>"event_accept"}}, "commit"=>"Accept"}
  User Load (0.8ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 
ORDER BY "users"."id" ASC LIMIT $2  [["id", 4], ["LIMIT", 1]]
Unpermitted parameter: :event_log

Форма фактически вызывается в представлении event_log:

<div class="btn-group">
  <%= render "events/event_accept_form" %>
</div>

1 Ответ

0 голосов
/ 28 января 2019

Проблема здесь в том, как генерируется форма (обратите внимание, что недопустимым параметром является event_log, и вы должны отправлять event_logs_attributes).

Поскольку это форма события, я предполагаю, что вы отправляете @переменная экземпляра события для представления

<%= form_for :event, url: events_path do |f| %>
  <%= f.hidden_field :user_id, :value => current_user.id %>
  <%= f.hidden_field :title, :value => @event.title %>
  <%= f.hidden_field :description, :value => @event.description %>
  <%= f.hidden_field :start_time, :value => @event.start_time %>
  <%= f.hidden_field :end_time, :value => @event.end_time %>
  <%= f.hidden_field :sender_id, :value => @event.user_id %>

  <%= f.fields_for :event_logs, @event_log do |event_log| %>
    <%= event_log.hidden_field :status, :value => :event_accept %>
  <% end %>

  <%= f.submit 'Accept', class: 'btn btn-success' %>
<% end %>

Controller

def event_params
  params.require(:event).permit(:title, :description, :start_time, :end_time, :user_id, :sender_id, event_logs_attributes: [:id, :status])
end

def show
    @event_log = EventLog.find(params[:id])
    @event = @event_log.event
    @invitee = User.find(@event_log.invitee_id)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...