我有一个带有标题和内容属性的Post表。我想使自动完成的文本字段,其中用户建议的帖子标题。我试图在我的rails应用程序中添加jquery自动完成。我是这样做的。
controller (add Posts title in Array)——
@posttitle = []
Post.all.each do |g|
@posttitle << g.title
end
视图——
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<%= text_field_tag :search, params[:search], :placeholder => "Search Religious Places...", :id=>"tags" %>
<script>
$(function() {
var availableTags = <%= @posttitle %>;
$( "#tags" ).autocomplete({
source: availableTags
});
});
</script>
但是没有显示任何建议(自动完成不工作)。我不知道哪里出了问题。请帮助
你试过这样做吗?
<script>
var availableTags = <%= raw @posttitle %>;
$(function() {
$( "#tags" ).autocomplete({
source: availableTags
});
});
</script>
如果您希望Ruby中的项数组显示为javascript数组,则需要:
1)将其放入逗号分隔的值列表中2)将每个值用引号括起来3)转义值,使引号不会导致javascript错误
如果你只想要标题:
控制器:
@titles = Post.pluck(:title)
,然后在你的视图中:
<script>
$(function() {
var availableTags = [<%= @titles.map{|title| escape_javascript(title)}.join(", ") %>];
$( "#tags" ).autocomplete({
source: availableTags
});
});
</script>
我认为你不应该在javascript中使用ruby数组。它不会作为数组计算。相反,你可以创建javascript数组并使用它作为
<script>
$(function() {
var availableTags = new Array();
<% @posttitle.each do |post| %>
availableTags.push(<%= post %>);
<% end %>
$( "#tags" ).autocomplete({
source: availableTags
});
});
</script>