2013-08-31 3 views
2

Я пытаюсь создать вспомогательный метод для отображения разных временных форматов, если сообщение было создано за последние 24 часа.Rails 4 custom helper method

Это то, что я в posts_helper.rb

def recent_post_time 
    @post = Post.find(params[:id]) 
    if @post.created_at.hour < 24 
    @post.created_at = @post.created_at.strftime("%R") 
    else 
    @post.created_at = @post.created_at.strftime("%v") 
    end 
end 

И Индексный

<% @posts.each do |post| %> 
    <%= recent_post_timre %> 
<% end %> 

Однако я получаю эту ошибку «Не удалось найти сообщение без ID» любые идеи?

ответ

4

Вы повторяете сообщения и хотите отображать время для каждого, да? Если это так, вы должны передать сообщение в метод recent_post_time, например.

<% @posts.each do |post| %> 
    <%= recent_post_time(post) %> 
<% end %> 

А затем настройте свой метод recent_post_time, чтобы использовать пройденный пост.

Вы также не должны пытаться присвоить значение created_at, просто введите его.

Проверка того, что час < 24 не совсем то, что вы хотите (это всегда меньше 24, учитывая, что есть только 24 часа в сутки, так что всегда будет 0-23) - вы хотите, если бы это было больше, чем день назад, поэтому я изменил свой код, чтобы отразить это.

def recent_post_time(post) 
    if post.created_at < 1.day.ago 
    post.created_at.strftime("%R") 
    else 
    post.created_at.strftime("%v") 
    end 
end 
+0

Вы, возможно, должны быть более конкретными. Что вы ожидаете от этого и что он не делает? Если ошибка не изменилась, ошибка не связана с проблемой, которую вы опубликовали. Пожалуйста, опубликуйте полный журнал ошибок. – sevenseacat

+0

Извините, это была ошибка на моем пути, спасибо за вашу помощь. Предоставляет ли рельсы «сегодняшний» метод, который я могу использовать вместо использования последних 24 часов? – Joshua

+0

Это то, что я пытался сделать, это работает, но это правильный способ его достижения? если post.created_at> Date.today – Joshua