@Fulcrum_29

Rails 4 strong parameters ForbiddenAttributesError — как исправить?

Не могу найти решение для следующей проблемы:
У меня есть модель Medicine с атрибутом expiration_date типа Date. При попытке создать новую запись Medicine получаю следующую ошибку

ActiveModel::ForbiddenAttributesError
Request

Parameters:

{"utf8"=>"✓",
 "authenticity_token"=>"5cxCW7RfAr/DrdWd/PfxN093Zj41KqlVBUWxyK2LZvE=",
 "medicine"=>{"company"=>"Company",
 "name"=>"Name",
 "med_type"=>"Category",
 "price"=>"100",
 "batch"=>"AB12345",
 "expiration_date(3i)"=>"20",
 "expiration_date(2i)"=>"3",
 "expiration_date(1i)"=>"2016",
 "quantity"=>"10"},
 "commit"=>"Сохранить"}


Как я понимаю, проблема в том, что хелпер date_select

<%= f.date_select :expiration_date , {:use_month_names => ['Январь', 'Февраль', 'Март','Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'], :order => [:day, :month, :year]}%>


разбивает дату на
"expiration_date(3i)"=>"20",
 "expiration_date(2i)"=>"3",
 "expiration_date(1i)"=>"2016"


и для strong params это не подходит.

def medicine_params
      params.require(:medicine).permit(:company, :name, :med_type, :price, :batch, :quantity, :expiration_date)
    end


Как правильно записать medicine_params в этом случае? Заранее спасибо!
P.S.
Я пробовал
params.require(:medicine).permit( :"expiration_date(1i)", :"expiration_date(2i)", :"expiration_date(3i)", :company, :name, :med_type, :price, :batch, :quantity)
ошибка остается.
  • Вопрос задан
  • 2722 просмотра
Решения вопроса 1
@Fulcrum_29 Автор вопроса
Я нашел ошибку, она заключается в filter_resource_access в контроллере medicines. Странно, что он некорректно работает для new и create экшена, ведь я пытаюсь выполнить эти действия из-под admin роли. Хотя index, update и destroy работают прекрасно.
authorization_rules.rb
authorization do

  role :admin do
    has_permission_on [:medicines], :to => [:index, :show, :new, :create, :edit, :update, :destroy]
  end
  role :guest do
    has_permission_on [:medicines], :to => [:show]
    has_permission_on [:users], :to => [:index, :show, :new, :create, :edit, :update]
  end

end
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы