Кнопка подтверждения не сохраняет моего подписчика Ruby на рельсах - PullRequest
1 голос
/ 17 июня 2019

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

Когда я создаю пользователя в консоли rails, выполняя:

Subscriber.create!(email: "test@example.com")

, он фактически сохраняет информацию о пользователе:

Subscriber Create (22.7ms)  INSERT INTO "subscribers" ("email", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "id"  [["email", "test@example.com"], ["created_at", "2019-06-17 11:00:06.853545"], ["updated_at", "2019-06-17 11:00:06.853545"]]], ["updated_at", "2019-06-17 11:00:06.853545"]]

, но не при регистрации его из формы.

index.html.erb

<form class="form form-cta mt-2">
  <div class="form-group">
    <div class="row gutter-0">
      <div class="col-8">
        <%= form_for @subscriber do |f| %>
        <%= f.email_field :email, placeholder: "Votre email", class: "form- 
        control form-control-rounded" %>
      </div>
      <div class="col">
        <%= f.submit :Sabonner, class: "btn btn-info btn-rounded btn-block" %>
      </div>
    </div>
      <% end %>
  </div>
</form>

statics_controller.rb

class StaticsController < ApplicationController
  def index
    @subscriber = Subscriber.new
  end
end

rout.rb

Rails.application.routes.draw do
  resources :subscribers
  root to: 'statics#index'
end

members_controller.rb

class SubscribersController < ApplicationController
  def create
    @subscriber = Subscriber.new subscriber_params
    if @subscriber.save  
        redirect_to root_path, notice: 'Namsté !'
    else
        redirect_to root_path, alert: 'test'
  end


  private

  def subscriber_params
      params.require(:subscriber).permit(:email)
  end

end

Консоль Rails:

Processing by StaticsController#index as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"balbalbla==", "subscriber"=>{"email"=>"test@test.com"}, "commit"=>"Sabonner"}
  Rendering statics/index.html.erb within layouts/application
  Rendered statics/index.html.erb within layouts/application (29.0ms)
Completed 200 OK in 188ms (Views: 129.2ms | ActiveRecord: 9.0ms)

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

Спасибо

1 Ответ

1 голос
/ 17 июня 2019

Вы ошиблись form_for url.Просто проверьте свои маршруты с помощью команды rake -T.Проверьте это для POST маршрута к вашему подписчику создать действие.Вы должны использовать его как действие формы.

Отправить действие, обработанное действием StaticsController#index вместо SubscribersController#create.

Измените код формы следующим образом:

<form class="form form-cta mt-2">
  <div class="form-group">
    <div class="row gutter-0">
      <div class="col-8">
        <%= form_for @subscriber, url: subscriber_path, method: :post do |f| %>
        <%= f.email_field :email, placeholder: "Votre email", class: "form- 
        control form-control-rounded" %>
      </div>
      <div class="col">
        <%= f.submit :Sabonner, class: "btn btn-info btn-rounded btn-block" %>
      </div>
    </div>
      <% end %>
  </div>
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...