当我在表单的主题字段中键入现有主题时,我收到此错误:
Started GET "/posts/autocomplete_topic_name?term=test" for 127.0.0.1 at 2011-05-21 10:51:19 -0700
Processing by PostsController#show as JSON
Parameters: {"term"=>"test", "id"=>"autocomplete_topic_name"}
Post Load (0.2ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" = 0 LIMIT 1
Completed in 28ms
ActiveRecord::RecordNotFound (Couldn't find Post with ID=autocomplete_topic_name):
app/controllers/posts_controller.rb:9:in `show'
Rendered /home/dude/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.0.6/lib/action_dispatch/middleware/templates/rescues/_trace.erb (2.5ms)
Rendered /home/dude/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.0.6/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (4.2ms)
Rendered /home/dude/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.0.6/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (14.2ms)
存在"测试"和"测试"主题。
模型:
class Topic < ActiveRecord::Base
has_many :posts
validates :name, :presence => true,
attr_accessible :name, :post_id
end
class Post < ActiveRecord::Base
belongs_to :topic
accepts_nested_attributes_for :topic
attr_accessible :name, :title, :content, :topic, :topic_attributes
end
视图:
/posts/new 仅呈现此表单:(使用 simple_form)
<%= simple_form_for :post, :url => { :controller => :posts, :action => "create" } do |f| %>
<h1>Create a Post</h1>
<%= f.input :name, :label => false, :placeholder => "Name (optional)", :required => false %>
<%= f.input :title, :label => false, :placeholder => "Title" %>
<%= f.input :content, :label => false, :placeholder => "Content", :as => :text %>
<%= f.simple_fields_for :topic do |topic_form| %>
<%= topic_form.input :name, :label => false, :placeholder => "Topic", :url => autocomplete_topic_name_path, :as => :autocomplete %>
<% end %>
<%= raw recaptcha_tags -%>
<%= f.button :submit, "Post" %>
<% end %>
控制器:
class PostsController < ApplicationController
autocomplete :topic, :name, :full => true
respond_to :html, :js, :xml
def new
@post = Post.new
end
def create
topic_name = params[:post].delete(:topic)
@topic = Topic.find_or_create_by_name(topic_name)
@post = Post.new(params[:post])
@post.topic = @topic
respond_to do |format|
if verify_recaptcha(:model => @post) && @post.save
format.html { redirect_to(@post, :notice => 'Post was successfully created.') }
else
flash.delete(:recaptcha_error)
flash.now[:error] = "Incorrect word verification. Are you sure you're human?"
format.html { render :action => "new" }
end
end
end
end
开机自检控制器的第 9 行是:
@post = Post.find(params[:id])
在帖子中#显示
routes.rb:
MyApp::Application.routes.draw do
root :to => "posts#index"
resources :topics
resources :posts
resources :comments
match "posts/autocomplete_topic_name", :as => "autocomplete_topic_name"
end
这是我的宝石文件:
gem 'rails', '3.0.6'
gem 'sqlite3'
gem 'ancestry'
gem 'jquery-rails', '>= 1.0.3'
gem 'kaminari'
gem 'nifty-generators'
gem 'rdiscount'
gem 'rails3-jquery-autocomplete'
gem 'recaptcha', :require => 'recaptcha/rails'
gem 'simple_form'
和架构:
create_table "posts", :force => true do |t|
t.string "name"
t.string "title"
t.text "content"
t.integer "topic_id"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "topics", :force => true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
end
感谢您的观看。
在您的路由文件中,尝试移动"匹配'帖子/...'"资源:p OSTS"之前的行。