在评论中提及用户用户名(@mention) - Rails

时间:2014-02-28 19:21:33

标签: ruby-on-rails ruby regex ruby-on-rails-4

在我的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这样的事情吗?我应该只使用正则表达式吗?

2 个答案:

答案 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可能属于视图部分以保持组织有序。当数据库中有太多用户时,将所有用户名加载到视图中可能不是最佳选择。