为什么当我访问“新”页面时会自动创建数据库条目?

时间:2018-12-08 17:19:40

标签: ruby-on-rails ruby

当我访问“新”页面时,我很难理解为什么我的应用程序会在数据库中自动创建条目。该页面应该具有一种表单,提交后,然后 only 然后在数据库(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 :(得分:4)

在控制器中,创建配方的逻辑已用新方法编写,而只是配方已在create方法中初始化。 但是在路由中,create方法具有POST调用(带有数据的表单提交),而新方法是GET。

因此,您所需要做的只是将“ create”方法的名称更改为“ new” 并在控制器中将“新”方法的名称更改为“创建”。

即)

....
module.exports = {
  entry: './src/js/index.js',
  output: {
    path: path.resolve(__dirname),
    filename: 'bundle.js'
  },
...

这将起作用。