2017-08-17 15 views
0

得到了一個超級快速的問題。我還是新來的鐵軌,並嘗試遵循這兩個問題,但他們不適合我:Why does Array.to_s return brackets?ruby 1.9 how to convert array to string without brackets從欄杆採集字符串顯示n

我想顯示最後的消息和它在我的聊天室應用程序中發出的日期。我能夠使用此代碼獲得結果,但它有括號,並且我希望刪除這些括號。這裏的任何幫助都會很棒,我也附上了截圖。非常感謝!

Show.html.erb

For the Date: <%= chatroom.messages.last(1).pluck(:created_at) %> For the Last Message in Chatroom: <%= chatroom.messages.last(1).pluck(:body) %>

DirectMessages控制器

class DirectMessagesController < ApplicationController 
before_action :authenticate_user! 

def show 
    users = [current_user, User.find(params[:id])] 
    @messageduser = User.find(params[:id]) 
    @chatroom = Chatroom.direct_message_for_users(users)   
    @chatroomall = current_user.chatrooms 
    @messages = @chatroom.messages.order(created_at: :desc).limit(100).reverse 
    @messagelast = @chatroom.messages.last(1) 
    last_message = @chatroom.messages.last 
    render "chatrooms/show" 
end 
private 

def chatroomuserlocator 
    @chatroomlocator = Chatroom.find(params[:chatroom_id]) 
end 
end 

enter image description here

回答

1

試試這個:

<%= chatroom.messages.last.created_at %> 

這:

<%= chatroom.messages.last.body %> 

記住pluck返回一個數組,這樣可以解釋你的括號內。

我不認爲你需要pluck在這裏,因爲你只是訪問單個項目的屬性。

+0

感謝@Dan的響應和上下文,我試着做了這樣的錯誤消息「undefined method' created_at'for nil :NilClass「 – Omar

+0

使用」.try「的最後一個工作!感謝億丹! – Omar

+0

沒問題。我很高興它有幫助。我只是在這裏更新我的評論,因爲我有一個錯字。如果你想從消息數組中刪除'nil'元素,你可以使用[compact](https://apidock.com/ruby/v1_9_3_392/Array/compact)這樣的方法:'<%= chatroom.messages。 'compact.last.created_at%>'。如果返回錯誤,您的chatroom實例中可能沒有任何消息。如果你只是想避免返回一個錯誤,你可以使用[try](https://apidock.com/rails/v3.2.1/Object/try)這樣的方法:'<%= chatroom.messages.last。嘗試(:created_at)%>' –

1

如果你不是太擔心內存的使用,你可以取整個對象只能訪問你想要的領域。

<%= chatroom.messages.last.created_at %> 
<%= chatroom.messages.last.body %> 
+0

感謝@urielSilva應對,我想這樣做了此錯誤消息「未定義的方法'created_at」的零:NilClass」我也把我的控制器的情況下,幫助。 – Omar

+0

您可以使用控制器中使用的'last_message'變量。只要確保你在變量名稱的開頭添加了@ @ @@@@在視圖和控制器中 – urielSilva

1

您可以將查找到的值,因此它不運行兩次:

last_message = chatroom.messages.last

然後你就可以有效地訪問屬性:

last_message.created_at 
last_message.body 

如果您有興趣限制屬性或last_message,使用select

last_message = chatroom.messages.select(:created_at, :body).last

全部放在一起:

<% last_message = chatroom.messages.select(:created_at, :body).last %> 
<%= last_message.created_at %> 
<%= last_message.body %> 
+0

謝謝@布拉德我試着做你的建議。在我的DirectMessages控制器中添加了'last_message = @ chatroom.messages.last'。然後在我的show views文件中,我添加了一行'<%= last_message.created_at%>'我得到了一個錯誤信息'undefined local variable or method'last_message'for#<#:0x007fe33d6aae28>「 – Omar

+1

@奧馬爾,你不會把它放在控制器中,你會保持它在視圖中,如所述的erb。如果你想在控制器中使用它,你需要使用'@ last_message' ... –