ActionController :: ParameterMissing в SubscribeersController # create - PullRequest
0 голосов
/ 23 февраля 2020

Мне кажется, что это прямая проблема, но другие рекомендуемые решения, похоже, не работают. По сути, все, что я хочу, - это приложение, которое создает подписчика с атрибутом номера телефона.

Контроллер подписчика

    class SubscribersController < ApplicationController
      def index
      end

      def new
         @subscriber = Subscriber.new
      end


      def create
        @subscriber = Subscriber.new(subscriber_params)
        @subscriber.save
      end

      def show
        @subscribers = Subscriber.all
      end

      def update
      end


      private
      def subscriber_params
        params.require(:subscriber).permit(:phone)
      end
    end

Создать. html .erb

<div class="recent">
  <h3>Subscribe to Texts</h3>
  <%= form_for @subscriber do |f| %>
    <span><label for="phone">Phone</label></span>
    <%= f.text_field :phone, class: 'form-control' %>
    <%= f.submit %>
  <%end%>
</div>

<% [:success, :error].each do |key| %>
  <% if flash[key] %>
    <div class="<%= key %>" id="flash">
      <%= flash[key] %>
    </div>
   <% end %>
<% end %>

Если я удалю .require (: subscriber), он не будет сохранять подписчика и он создаст транзакцию отката, сообщающую, что подписчик является недопустимым параметром

, если я помещу подписчика в .permit, он просто не сохранит его через форму.

Что мне делать? Я чувствую, что это прямо вперед, что делает его еще более разочаровывающим.

Редактировать: Программа не будет работать с .require (: subscriber), если я добавлю ее в .permit (: subscriber,: phone), я получу это в журналах сервера

Параметры : {"utf8" => "✓", "authenticity_token" => "xxxx ==", "subscriber" => {"phone" => "5555555555"}, "commit" => "Create Subscriber"} Недопустимые параметры :: utf8,: authenticity_token,: subscriber,: commit

Если я просто поставлю .permit (: phone), я получу то же самое

Если я поставлю @ subscriber.save! в методе создания я получаю эту ошибку:

app/controllers/subscribers_controller.rb:20:in `subscriber_params'
app/controllers/subscribers_controller.rb:6:in `create'
Started GET "/" for ::1 at 2020-02-23 10:02:32 -0500
Processing by SubscribersController#create as HTML
   (0.2ms)  begin transaction
   (0.1ms)  rollback transaction
Completed 422 Unprocessable Entity in 11ms (ActiveRecord: 0.9ms)



ActiveRecord::RecordInvalid (Validation failed: Phone can't be blank):

app/controllers/subscribers_controller.rb:7:in `create'

1 Ответ

1 голос
/ 23 февраля 2020

Ваш код находится вне строки, по крайней мере, в отношении соглашений по рельсам.

Добавьте метод new, который должен обрабатывать показ формы, а не метод create. Затем переместите форму внутрь этого и убедитесь, что добавили

def new
  @subscriber = Subscriber.new
end

внутри этого нового метода, вам нужно создать запись внутри метода create. Вы, вероятно, хотите что-то вроде этого там.

# POST /subscribers
# POST /subscribers.json
def create
  @subscriber = Subscriber.new(subscribere_params)

  respond_to do |format|
    if @subscriber.save
      format.html { redirect_to @subscriber, notice: 'Subscriber was successfully created.' }
      format.json { render :show, status: :created, location: @subscriber }
  else
      format.html { render :new }
      format.json { render json: @subscriber.errors, status: :unprocessable_entity }
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...