レールで基本的なアイテム作成を作成しようとしていますが、新しいアイテムの作成に問題があります。アイテムのname
、たとえばWash the dishes
を作成したいとします。これらは私が持っているコードです:レールに新しいオブジェクトを作成できません
ルート:
resources :items
ItemsController:
class ItemsController < ApplicationController
...
def new
@item = Item.new
end
def create
@item = Item.new(item_params)
if @item.save
flash[:notice] = "Item was saved!"
redirect_to @item
else
flash.now[:alert] = "ERROR. ERROR."
render :new
end
end
...
private
def item_params
params.require(:item).permit(:name, :list_id)
end
end
アイテム/ new.html.erb
<%= form_for :item do |f| %>
<%= f.text_field :name %>
<%= f.submit %>
<% end %>
最後に、スキーマ:
create_table "items", force: :cascade do |t|
t.string "name"
t.integer "list_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
...
私はいくつかの異なるエラーコードを持っていますが、これは現在私が固執しているものです(別のエラーコードを示したか、単に "ERROR"を出力します。私は私のルートを確認するために、このSO postからの提案に従っ
POST /items(.:format) items#create
new_item GET /items/new(.:format) items#new
、これは私が持っているものです。私はルートを熊手に行くときに、エラーが」
Routing Error
No route matches [POST] "/items/new"
(save
が失敗したときに、私のセットアップを警告します):
2.2.2 :019 > r = Rails.application.routes
=> #<ActionDispatch::Routing::RouteSet:0x007fff323c3230>
2.2.2 :020 > r.recognize_path "/items/new"
=> {:controller=>"items", :action=>"new"}
私もrails c
に行っていると私は手動で新しいアイテムを作成することができました。(i = Item.new(name:"Test 123"); i.save
)
私は何を欠席しましたか?
これは意味があります。だから私が最初に持っていたのは '<%= form_for:item do | f | %> '、':item'は何を表しているのかを説明していますか? – Iggy
@Iggyこれはレコードオブジェクトを表し、文字列またはシンボルを渡すことができます。 '<%= f.text_field:name%>'のようなフォームフィールドを持っているなら、次のHTMLを生成します。 ' params [:item] [:name]を使って、名前のテキストフィールドを作成することができます(これは私の答えを更新しました)。詳細はhttp://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_forをご覧ください –