2014-02-28 57 views
2

在我的Rails應用中,如果用戶在評論中使用@字符提到另一個用戶名,比如@max,我試圖添加自動填充以提示列表用戶,然後自動創建的link_to(用戶名,user_path(用戶)在評論中提到用戶名(@mention) - Rails

這是我在我的評論部分:

<%= 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

您是否嘗試過使用'data = User.all'?嘗試比提問要快。 –

+0

是的,正確的在我的評論部分的形式下,頁面加載正常,但是當我輸入@someusername時沒有任何反應:

+0

你不能只在JavaScript文件中輸入ruby代碼。 –

回答

2

你可以做這樣的事情:

<script> 
    data = <%= raw User.pluck(:username).compact.to_json %>; 
    $('textarea').atwho({at:"@", 'data':data}); 
</script> 

您可能希望將用戶名的加載移動到控制器或輔助方法。整個sniplet可能屬於一種觀點,部分保持組織。當數據庫中的用戶過多時,將所有用戶名加載到視圖中可能不是最好的想法。

3

我認爲data = User.all不工作的原因是因爲User.all會返回一個User對象的數組。你想要做的是檢索那些User對象usernames(或任何你想自動完成使用,並存儲在data代替。

你可以嘗試像

@usernames = User.pluck(:username) 

讓所有的用戶名。然後,在你的部分:

data = <% @usernames &> 
$('textarea').atwho({at:"@", 'data':data}); 

這是假設,當然,你的部分是一個.erb文件,你可以嵌入Ruby代碼的