新手问题 sinatra 传参数给 views 的问题

cicholgricenchos · 2014年05月29日 · 最后由 cicholgricenchos 回复于 2014年05月29日 · 1661 次阅读

需要传给views的参数有很多,一多就会出现一些高度重复的语句,例如 @site_title = SiteConfig.where(:name => 'site_title')[0].value @site_description = SiteConfig.where(:name => 'site_description')[0].value @site_footer = SiteConfig.where(:name => 'site_footer')[0].value 这些参数对于所有页面都是一致的,但是对每个路由请求都要写一遍,有没有办法简化这些代码?我能想到的是封进一个方法,但是在app.rb里面写方法应该是不太对的吧?

MVC模式里面应该Views是不处理任何逻辑的,但是我看robbin的博客源码,他的views里有很多功能性的代码,有的controllers只是读取了数据就整个传给views,这样做是规范的吗? robbin的controllers都十分简洁,我的则都是长长一串。比如生成一个文章列表,我的做法是对每一篇文章都调用一次列表项的模板,加起来形成一个列表,这个列表再作为页面模板的内容,调用页面模板显示,这些都是app.rb完成的,而robbin只是获取了一组blog文章,显示的处理是views完成的。

我想问问这些问题规范的处理是什么?谢谢

共收到 2 条回复

两个地方改进,减少重复。

  1. 首先是简化定义这些重复的数量读取,可以在SiteConfig里使用method_missing,eval之类的直接定义数据项取得的方法,然后就可以直接这样取SiteConfig.site_title SiteConfig.site_description之类的API.

  2. 在sinatra的app.rb中使用before的block(类似rails的before_filter)中设置这些需要取得的值,然后就不用在每一个controller方法中再取一次了。

#1楼 @qichunren 噢噢,还没留意过before,去试试

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册