параметр отсутствует или значение пусто: активность Rails 4 - PullRequest
0 голосов
/ 10 июня 2018

Когда я пытаюсь создать запись в моем приложении, я получаю

ActionController::ParameterMissing in TodosController#create
param is missing or the value is empty: activity

Ожидаемый источник:

def todo_params
    params.require(:activity).permit(:name, :due)
end

Вот мой запрос:

    {"utf8"=>"✓",
 "authenticity_token"=>"mR11T50dN8tm/q+S0fNd+mYYZBR6Xq4it4ujtEOmt/7RmA4TjzTKD//XmFU+UumpbmKcaj9DtG6noHOD2pwk2w==",
 "todo"=>{"name"=>"Ezekiel",
 "activity"=>"test....an 8th time"},
 "commit"=>"Create Todo"}

Я не уверен, почему это не работает, поскольку параметр активности явно пропущен, как в запросе

Вот контроллер:

def create
    @todo = Todo.create(todo_params)
end

def todo_params
    params.require(:activity).permit(:name, :due)
end

И, наконец, мой View:

<div class="reveal" id="ezekielTask" data-reveal>
    <%= simple_form_for @todo do |f| %>
        <%= f.input :name, :as => :hidden, :input_html => {:value => "Ezekiel"} %>
        <%= f.input :activity %>
        <%= f.button :submit %>
    <% end %>
</div>

Эта часть моего приложения rails представляет собой список задач, он отображается нормально, я могу добавлять записи через консоль, этот способ просто не будет работать, и я понятия не имею, почему.он передает данные правильно, просто не принимая их.

Ответы [ 3 ]

0 голосов
/ 10 июня 2018

В параметре require обычно мы используем название модели (todo), а внутри permit мы используем атрибуты этой модели (:name, :activity)

def todo_params
    params.require(:todo).permit(:name, :activity)
end
0 голосов
/ 10 июня 2018

Контроллер

def create
        @todo = Todo.create(todo_params)

        respond_to do |format|
          if  @todo.save
            format.html { redirect_to location_path, notice: 'Todo was successfully created.' }

          else
            format.html { render :new }
           }
          end
        end
      end

Параметры

def todo_params
  params.require(:todo).permit(:name, :activity)
end
0 голосов
/ 10 июня 2018

Вам нужно изменить метод сильных параметров, чтобы он требовал todo, а затем принять параметры :name и :activity

def todo_params
  params.require(:todo).permit(:name, :activity)
end

Причина этого

{"utf8"=>"✓",
 "authenticity_token"=>"mR11T50dN8tm/q+S0fNd+mYYZBR6Xq4it4ujtEOmt/7RmA4TjzTKD//XmFU+UumpbmKcaj9DtG6noHOD2pwk2w==",
 "todo"=>{"name"=>"Ezekiel",
 "activity"=>"test....an 8th time"},
 "commit"=>"Create Todo"}

Если вы видите в параметрах, вы получаете name и activity внутри todo

...