Почему я получаю params как ноль? - PullRequest
0 голосов
/ 12 мая 2018

У меня есть форма, которую я отправляю, используя jQuery:

<form data-type="html" novalidate="novalidate" id="free_circuit_form" class="new_experiment" action="/en/experiments" accept-charset="UTF-8" method="post">
<input name="utf8" type="hidden" value="&#x2713;" />
<input type="hidden" name="authenticity_token" value="+0BPI4JbryN/WVCGrA0OxZNIteXb0p01XZJsxVtW9qYFIxt0EgQ6OJ2rDpaTmQwlVPe9a/qlwEteHvnjWbysOw==" />

<input type="hidden" id="experiment_not_signed_in_circuit_data" name="experiment[not_signed_in_circuit_data]"/>
</form>

, но когда я получаю доступ к params внутри контроллера, я получаю ее nil!Разве params не должен содержать все параметры, которые я отправил с формой?

В контроллере эксперимента я допускаю параметры как:

def experiment_params
    params.require(:experiment).permit(: not_signed_in_circuit_data, :title, :circuit, :intro_text, :public, :meta_description, :thumbnail => [:data], :descriptions_attributes => [:id, :data, :title, :position], :circuits_attributes => [:id, :data, :title, :position, :circuit_types])
  end

Есть идеи?

РЕДАКТИРОВАТЬ

Вот журнал сервера для запроса после того, как я попытался использовать контроллер приложения для помещения действия в:

Started POST "/en/not_signed_in_circuit" for 127.0.0.1 at 2018-05-12 18:38:24 +0300
Processing by ApplicationController#not_signed_in_circuit as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"tNwIjklA9Ic3u7jOpMJUSPPd8lDmKkZTppG0UvQuBchKv1zZ2R9hnNVJ5t6bVlaoNGL63sddGy2lHSF09sRfVQ==", "experiment"=>{"not_signed_in_circuit_data"=>"{\"public\":false,\"title\":\"abc\",\"circuits\":[{\"circuit\":\"0\",\"text\":\"\"}]}"}, "locale"=>"en"}

Я вижу параметры в журнале, но внутри действия params есть nil

1 Ответ

0 голосов
/ 13 мая 2018

Ваша форма немного странная, вы, вероятно, не используете помощники по форме Rails, такие как form_for.Но на самом деле у вас есть проблема с именами.

Все элементы ввода вашей формы должны быть названы в соответствии с вашей моделью, например:

  • эксперимент [что-то]
  • эксперимент [что-то другое]
  • эксперимент[другое]

В вашем случае есть только 3 входа: utf8, authenticity_token и experiment[not_signed_in_circuit_data]

Таким образом, на самом деле есть только один параметр, связанный с вашиммодель.

Вы можете получить доступ к этому параметру в вашем контроллере с помощью: params[:experiment][:not_signed_in_circuit_data].Так что это нормально, у вас нет доступа к другим параметрам, связанным с моделью эксперимента (например, заголовок, схема)

Что забавно, когда мы просматриваем журналы, мы можем видеть дополнительные параметрыпод params[:experiment][:not_signed_in_circuit_data].Вы можете получить к ним доступ следующим образом: params[:experiment][:not_signed_in_circuit_data][:title] или params[:experiment][:not_signed_in_circuit_data][:public].Кажется, что есть дополнительный слой вложения ..

Я предлагаю вам упростить вашу форму и сделать каждое поле ввода с именем вроде experiment[title] etc ...

...