Почему записи в базе данных создаются автоматически при посещении «новой» страницы? - PullRequest
0 голосов
/ 08 декабря 2018

Мне трудно понять, почему мое приложение автоматически создает записи в базе данных, когда я захожу на "новую" страницу.Предполагается, что страница имеет форму, которая при отправке затем и только создает записи в базе данных (SQLite3).

Контроллер:

    class RecipeController < ApplicationController
  def index
    @recipes = Recipe.all
  end

  def new

    @recipe = Recipe.create(params[:recipe])
    if @recipe.save
        redirect_to recipe_new_path
    else
        reload_page
    end
  end

  def create

    @recipe = Recipe.new

  end

  def show
  end

  def update
  end

  def destroy
  end

  private

  def recipe_params

    recipe_params = params.require(:recipes)
  end


end

Представление:

 <!DOCTYPE html>
<html>
<body>
<h1>Add a recipe</h1>
    <%= form_for @recipe do |f| %>
    <%= f.label :name, "Recipe Name:" %>
    <%= f.text_field :name %>
    <br>
    <%= f.label :recipe, "Recipe Description:" %>
    <%= f.text_field :recipe %>
    <br>
    <%= f.submit %>
    <% end %>
</body>
</html>

Файл маршрутов:

    Rails.application.routes.draw do

  get 'recipe' => 'recipe#index'
  get 'recipe/new' => 'recipe#new'
  post 'recipe/create' => 'recipe#create'
  post 'recipes' => 'recipe#create'
  resources :recipes
  get 'recipe/:id' => 'recipe#show'
  get 'recipe/update' => 'recipe#update'
  get 'recipe/destroy' => 'recipe#destroy'
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

1 Ответ

0 голосов
/ 08 декабря 2018

В контроллере логика для создания Рецепта была написана в новом методе, и только рецепт только инициализируется в методе создания.Но в маршрутах метод create имеет вызов POST (отправка формы с данными), а новый метод - GET.

Так что все, что вам нужно сделать, это просто изменить имя метода 'create' на 'new 'и измените имя метода' new 'как' create 'в вашем контроллере.

ie)

def create
    @recipe = Recipe.create(params[:recipe])
    if @recipe.save
        redirect_to recipe_new_path
    else
        reload_page
    end
  end

  def new
   @recipe = Recipe.new
  end

Это будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...