这是处理两个模型的表单: Post 和 Tag 彼此之间有has_and_belongs_to_many
个关联。 Tag模型有一个名为:name
的属性,Post模型有一个名为:tag_name
的attr_accessor(以便自动完成可以工作):
<%= form_for(@post) do |f| %>
<%= render 'shared/error_messages' %>
<div class="field">
<%= f.label :title %><br />
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.label :content %><br />
<%= f.cktext_area :content %>
</div>
<div class="field">
<%= f.label :tag_name %>
<%= f.autocomplete_field :tag_name, autocomplete_tag_name_posts_path, :"data-delimiter" => ' ' %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
发布模型:
class Post < ActiveRecord::Base
attr_accessible :title, :content, :tag_name
attr_accessor :tag_name
def tag!(tags)
tags = tags.split(" ").map do |tag|
Tag.find_or_create_by_name(tag)
end
self.tags << tags
end
end
发布控制器:
def create
@user = current_user
@post = @user.posts.new(params[:post])
if @post.save
redirect_to @post, notice: 'post was successfully created.'
else
render action: "new"
end
@post.tag!(params[:post][:tag_name])
end
def edit
@post = Post.find(params[:id])
end
def update
@post = Post.find(params[:id])
@post.update_attributes(params[:post])
@post.tag!(params[:post][:tag_name])
redirect_to @post
end
使用 rails3-jquery-autocomplete gem 的字段会存储我输入的值。但是,当我单击编辑时,该字段为空,但奇怪的是我可以输入更多文本并单击更新:
<%= f.autocomplete_field :tag_name, autocomplete_tag_name_posts_path, :"data-delimiter" => ' ' %>
有任何建议可以解决这个问题吗?