在我的rails应用程序中,如果用户使用@字符提及评论中的另一个用户名,例如@max我正在尝试添加自动填充以建议用户列表,然后自动创建link_to(用户名,user_path (用户)
这就是我在评论中的部分内容:
<%= form_for [commentable, Comment.new] do |f| %>
<%= hidden_field_tag :commentable_type, commentable.class.to_s %>
<%= hidden_field_tag :commentable_id, commentable.id %>
<p>
<%= f.text_area :body %>
</p>
<p><%= f.submit "Submit" %></p>
<% end %>
我正在尝试使用这个宝石:https://github.com/ichord/jquery-atwho-rails
它表示用
绑定文本区域data = ['tom','john'];
$('textarea').atwho({at:"@", 'data':data});
我在哪里放这个?我可以做像data = User.all这样的事情吗?我应该只使用正则表达式吗?
答案 0 :(得分:3)
我认为data = User.all
无效的原因是因为User.all
将返回User
个对象的数组。您要做的是检索那些User
对象usernames
(或者您想要使用自动填充的任何内容,并将其存储在data
中。
您可以尝试类似
的内容@usernames = User.pluck(:username)
获取所有用户名。然后,在你的部分:
data = <% @usernames &>
$('textarea').atwho({at:"@", 'data':data});
当然假设您的partial是.erb
文件,您可以在其中嵌入ruby代码。
答案 1 :(得分:2)
您可以这样做:
<script>
data = <%= raw User.pluck(:username).compact.to_json %>;
$('textarea').atwho({at:"@", 'data':data});
</script>
您可能希望将用户名的加载移动到控制器或辅助方法中。整个sniplet可能属于视图部分以保持组织有序。当数据库中有太多用户时,将所有用户名加载到视图中可能不是最佳选择。