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

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

需要传给 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 完成的。

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

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

  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,去试试

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