0

私はレールに不慣れで、簡単なブックマークテーブルを作成しようとしています。

  def up
create_table :bookmarks do |t|
    t.string  :path,        :null => false
    t.integer :user_id,     :null => false

    t.timestamps
end

add_index :bookmarks, :user_id
add_index :bookmarks, :path
  end

それから私は私のコントローラーにこれを持っています:

    # GET bookmark/new
# GET bookmark/new.json
def new
    @bookmark = Bookmark.new
end

# POST bookmark/new
# POST bookmark/new.json
def create
    @bookmark = Bookmark.new(params[:bookmark])
    if @bookmark.save
        flash[:success] = "Bookmark Saved"
    else
        flash[:failure] = "Failed !"
    end
end

そして私の見解はこれです:

<%= form_for :bookmark do |bookmark| %>
<%= bookmark.label :path %>
<%= bookmark.text_field :path %>

<%= bookmark.label :user_id %>
<%= bookmark.text_field :user_id %>

<%= bookmark.submit "Add bookmark" %>
<% end %>

最後にレーキルートを実行すると、次のルートリストが取得されます。

          bookmark_index GET    /bookmark(.:format)            bookmark#index
                     POST   /bookmark(.:format)            bookmark#create
        new_bookmark GET    /bookmark/new(.:format)        bookmark#new
       edit_bookmark GET    /bookmark/:id/edit(.:format)   bookmark#edit
            bookmark GET    /bookmark/:id(.:format)        bookmark#show
                     PUT    /bookmark/:id(.:format)        bookmark#update
                     DELETE /bookmark/:id(.:format)        bookmark#destroy

フォームを送信しようとすると、次のエラーが発生します。

Routing Error

No route matches [POST] "/bookmark/new"

Try running rake routes for more information on available routes. 

編集:

:bookmarkを@bookmarkに変更すると、次のエラーがスローされます。

    NoMethodError in Bookmark#new

Showing /media/wahtver/600415AD27D78282/3pces/pces/app/views/shared/_bookmark_form.html.erb where line #1 raised:

undefined method `bookmarks_path' for #<#<Class:0x00000003a48398>:0x007f1034b6b908>

Extracted source (around line #1):

1: <%= form_for @bookmark do |bookmark| %>
2:  <%= bookmark.label :path %>
3:  <%= bookmark.text_field :path %>
4: 

何が問題ですか?

ありがとう

4

2 に答える 2

1
<%= form_for @bookmark do |bookmark| %>

ではなく

<%= form_for :bookmark do |bookmark| %>

エラーメッセージを詳しく見てください。POSTではなく、を使用していGETます。

編集:あなたのルートはである必要がありますresources :bookmarks

実行すると、次のrake routesようになります。

bookmarks GET /bookmarks(.:format) bookmarks#index

于 2013-03-16T14:38:58.307 に答える
0

ルートをどのように宣言しましたか?route.rbファイルにありましたresource :bookmarkresources :bookmarks

createメソッドにコントローラーが表示されている場合は、次のようになります。

# POST bookmark/new
# POST bookmark/new.json
def create

スキャフォールドを使用する場合(おそらくスキャフォールドを使用してコントローラーを生成したと思います)、railsが各メソッドの上に自動的に生成するというコメントに注意してください。POST /bookmarksまたはである必要がありますPOST /bookmark。何らかの理由で足場を使用した場合、レールはそのルートを悪く生成しました。

ファイルを表示しroutes.rbます。

于 2013-03-16T15:07:01.620 に答える