1

申し訳ありませんが、私はレールに慣れていません

現在、 https://pinboard.inのような小さなアプリケーションを構築しようとしています。彼らとの夏のインターンシップを取得しようとしています。

これが私のブックマークモデルです

class Bookmark < ActiveRecord::Base
  attr_accessible :url, :title, :description, :counter 
  belongs_to :user 

  #validates that url has https:// or http://
  validates :url, :format => { :with => /(^$)|(^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-  9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$)/ix,
  :message => "Invalid URL" }
end

これが私のブックマークコントローラーです

class BookmarksController < ApplicationController
    def add_bookmark
        @bookmark = Bookmark.new 

        respond_to do |format|
            format.html 
        end 
    end 

    def draw_recent
        @bookmarks = Bookmark.all
    end 
end

これが私のフォームです

<%= form_for :bookmark do |f| %>
    URL: <%= f.text_field :url %><br/>
    Title: <%= f.text_field :title %><br/>
    Description: <%= f.text_field :description %><br/>
    <%= f.submit "Submit" %>
<% end %>

すべてが正しくレンダリングされ、情報を入力して送信すると追加されます

ここに私の出力があります

Started POST "/add" for 127.0.0.1 at 2013-05-09 09:55:58 -0400
Processing by BookmarksController#add_bookmark as HTML
  Parameters: {"utf8"=>"✓",    "authenticity_token"=>"ZCxA226pOVyu5AkQAmvvfKz5uPQ4gFggPTwrswtqZYk=", "bookmark"=>  {"url"=>"http://litmus.com", "title"=>"Email marketing ", "description"=>"email marketing "},  "commit"=>"Submit"}
Rendered bookmarks/_form.html.erb (1.9ms)
Rendered bookmarks/add_bookmark.html.erb within layouts/application (3.3ms)
Completed 200 OK in 96ms (Views: 95.4ms | ActiveRecord: 0.0ms)

私の頭には2つの考えがあります.フォームは正しく投稿されていますが、どういうわけかデータベースに何も保存されていません.コントローラにsaveメソッドが必要ですか?

:bookmark の代わりに @bookmark を試すと、アプリは間違ったbookmarks.pathというエラーをスローします

undefined method `bookmarks_path

前者はコントローラーでインスタンス @bookmark を実際に操作しており、後者はモデルをラップしていることを理解しています....

誰かが私を啓発できますか?これは皆さんにとって非常に些細なことだと思います... :)

4

1 に答える 1

1

form_for @bookmark do |f| にする必要があります。undefined methodconfig/routes.rb でルートを定義していないため、エラーが発生しています。そこに追加します。

resources :bookmarks

これにより、CRUD 規則に従って RESTful リソースが追加されるため、すぐに使用できるようにコントローラー メソッドの名前を変更する必要があります。現在行っていることには、少なくとも 3 つの方法が必要です。

app/controllers/bookmarks_controller.rb で:

最初のものは /bookmarks/new でフォームをレンダリングします

def new
  @bookmark = Bookmark.new
end

2 つ目は、フォームの送信を処理します (命名規則に従うこと以外は、何もする必要はありません)。

def create
  @bookmark = Bookmark.new(params[:bookmark])
  @bookmark.save
end

現在の「draw_recent」のようにブックマークを表示する3番目のもの

def index
  @bookmark = Bookmark.all
end

その後、データの検証などに進むことができますが、基本的な流れはそのようにする必要があります。

慣例から始めて、後で自信を持ってメソッドの標準名を変更することをお勧めします。

于 2013-05-09T14:28:54.957 に答える