当我访问“新”页面时,我很难理解为什么我的应用程序会在数据库中自动创建条目。该页面应该具有一种表单,提交后,然后 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
答案 0 :(得分:4)
在控制器中,创建配方的逻辑已用新方法编写,而只是配方已在create方法中初始化。 但是在路由中,create方法具有POST调用(带有数据的表单提交),而新方法是GET。
因此,您所需要做的只是将“ create”方法的名称更改为“ new” 并在控制器中将“新”方法的名称更改为“创建”。
即)
....
module.exports = {
entry: './src/js/index.js',
output: {
path: path.resolve(__dirname),
filename: 'bundle.js'
},
...
这将起作用。