2012-05-24 62 views
1

我已经花了几天的时间阅读和熟悉handlebars.js模板,这很好。如何使用ruby on rails helpers来格式化json数据?

现在我正在使用我的一个部分,其中有一堆html,我使用过诸如simple_format,time_ago_in_words等帮助器。显然这些助手不能与把手一起使用。所以我想这样做:

def get_micropost 

    respond_to do |format| 
    format.json { render json: formatted_micropost_json_data(Micropost.where("id < ?", params[:micropost_id]).first) } 
    end 

end 

微柱帮手:

module MicropostsHelper 

    def formatted_micropost_json_data(micropost) 

     content: simple_format h(micropost.content) 
     created_at: time_ago_in_words(micropost.created_at) 
     id: micropost.id 
     image: micropost.image 
     link: micropost.link 
     poster_id: micropost.poster_id 
     updated_at: micropost.updated_at 
     user_id: micropost.user_id 

    end 

end 

所以,当我通过Ajax获得JSON回来把它可能已被正确格式化。然后,我可以简单地显示我的把手变量正常。

这会工作吗?

如果不是最好的办法是什么?

亲切的问候

回答

4

这里是我建议的代码的重写:

class Micropost 
    def formatted_json_data 
    { 
     content: simple_format(h(self.content)), 
     created_at: time_ago_in_words(self.created_at), 
     id:   self.id, 
     image:  self.image, 
     link:  self.link, 
     poster_id: self.poster_id, 
     updated_at: self.updated_at, 
     user_id: self.user_id 
    } 
    end 
end 

def get_micropost 
    respond_to do |format| 
    format.json do 
     posts = Micropost.where("id < ?", params[:micropost_id]) 
     data = posts.first.formatted_json_data 
     render(json: data) 
    end 
    end 
end 

你想你的你的方法里面的文字哈希 - 你有什么本来不是句法无效Ruby代码。

也打破了长长的链式方法调用可能会使更多的信息错误消息,并提供更明确的机会来处理它们。

+0

感谢您的提示!我错过了逗号。无论如何,你对当前问题的处理方式更好,可扩展性更强。 – thesis

+0

当使用ajax获取get_microposts url时,我收到状态码:500内部服务器错误。这之前没有发生过......不太清楚现在为什么会发生这种情况。 – LondonGuy

+0

嗯,我不确定代码的其余部分是什么样子的,所以你必须明智地调整我的答案才能处理其余部分。 500错误可能表示出现了ruby错误 - 如果您可以检查日志以查找错误的名称和回溯,那么可能会更多地了解错误。 – arcresu