现在我正在尝试构建一个像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)
我脑子里有两个想法,好吧我的表格是正确发布但不知何故它没有保存到我的数据库,我的控制器中是否需要一个保存方法?
当我尝试@bookmark而不是:书签时,应用程序会向我发出一个错误,说错了bookmarks.path
undefined method `bookmarks_path
我理解前者你实际上正在使用控制器中的@bookmark实例,而后者正在模型周围....
有人可以开导我吗?我觉得这对你们来说非常微不足道...... :)
答案 0 :(得分:1)
应该是form_for @bookmark do | f |。您收到undefined method
错误,因为您尚未在config / routes.rb中定义路由,请添加:
resources :bookmarks
这将按照CRUD约定添加RESTful资源,因此您应该更改控制器方法的名称,以便开箱即用。您现在需要至少三种方法:
在你的app / controllers / bookmarks_controller.rb中:
第一个会将您的表单呈现在/ bookmarks / new
def new
@bookmark = Bookmark.new
end
第二个将处理表单提交(除了命名约定之外,不需要您执行任何操作)
def create
@bookmark = Bookmark.new(params[:bookmark])
@bookmark.save
end
第三个显示当前'draw_recent'中的书签
def index
@bookmark = Bookmark.all
end
之后你可以继续验证数据等,但基本流程应该是这样的。
最好从约定开始,以便在您更有信心时更改方法标准名称。