我之前读 excel 文件都是用的 roo,印象中导出没有用过任何 gem,直接用 Office 的 Spreedsheet XML 格式,Railscasts 上也有示例,好处是直接就可以用 erb 模板了,虽然可能繁琐一点,但是胜在直观:
<?xml version="1.0"?>
<!- http://railscasts.com/episodes/362-exporting-csv-and-excel ->
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<Worksheet ss:Name="Sheet1">
<Table>
<Row>
<Cell><Data ss:Type="String">ID</Data></Cell>
<Cell><Data ss:Type="String">Name</Data></Cell>
<Cell><Data ss:Type="String">Release Date</Data></Cell>
<Cell><Data ss:Type="String">Price</Data></Cell>
</Row>
<% @products.each do |product| %>
<Row>
<Cell><Data ss:Type="Number"><%= product.id %></Data></Cell>
<Cell><Data ss:Type="String"><%= product.name %></Data></Cell>
<Cell><Data ss:Type="String"><%= product.released_on %></Data></Cell>
<Cell><Data ss:Type="Number"><%= product.price %></Data></Cell>
</Row>
<% end %>
</Table>
</Worksheet>
</Workbook>
更多介绍可以参考 Wikipedia 的内容: Microsoft Office XML formats: Excel XML Spreadsheet example
这种方式比较繁琐,代码量也多,输出的文件可能也更大(文本文件),需要开发者学习具体的标签跟类型等。但是可以拥有丰富的灵活性,比如样式跟单元格合并之类的,另外不需要任何额外依赖,适合对导出的表格有复杂的格式要求的场景吧。
遗憾,时间冲突,刚好那天有事,精神上支持。
能让人看懂就是好的,我常用来 draw.io
可能会写对一些基础知识的理解性的博客,但这样的内容似乎不适合用做分享
大可不必如此刻意区分,不管是基础还是深入,我相信总会有受众在,或许这个受众也是个新手,也或许是没考虑过你的问题的相对有经验的人。Ruby China 是开放自由的社区,所以抱着开放与交流的心态就好。
#3 楼 @benzheren 哈哈,不客气,好的就强力推荐下而已
好团队,🐂 团队!支持下!哈哈
#12 楼 @hidoos #13 楼 @yingce #14 楼 @betterthornbird #15 楼 @kayakjiang 你们果然都是周末才来看帖的
这不是老早就有了的吗
连个链接都懒得编辑,怀疑楼主的诚意。短短不到三行字,倒是罗列了不少名词。。。
赞!现在好像也就上海那边 Elixir 有 meetup 吧?Tony 哥啥时候来珠三角地区布道?
group.members << "来自广州到优秀的 React 工程师"
错别字
反正我已经点了赞!
#6 楼 @akirapanda 代码比文档好的典范,哈哈
#1 楼 @helperhaps 跟之前的极光推送的那个是异曲同工,不过至少极光那个能跑起来。
对于外包可能真是这样,客户会想,如果这个项目做完,后边又很难找到相同技术栈的人来维护,那他干嘛不一开始就找一个多人用的技术栈呢?
小波真是走遍祖国大江南北啊!
@xifengzhu 话说拍照就好好拍照啊,摸着别人腿是几个意思
沙发!!!
#6 楼 @cisolarix 在 controller action 里边放了个断点 binding.pry
。
#2 楼 @dimos locale 是 actionview 里边的代理方法:
[1] pry(#<HomeController>)> show-source locale
From: /Users/martin/.rvm/gems/ruby-2.3.1/gems/actionview-5.0.0/lib/action_view/view_paths.rb @ line 11:
Owner: ActionView::ViewPaths
Visibility: public
Number of lines: 2
delegate :template_exists?, :any_templates?, :view_paths, :formats, :formats=,
:locale, :locale=, :to => :lookup_context
lookup_context
方法定义如下:
def lookup_context
@_lookup_context ||=
ActionView::LookupContext.new(self.class._view_paths, details_for_lookup, _prefixes)
end
而 ActionView::LookupContext
中有相关的实现代码:
module ActionView
class LookupContext
def locale
@details[:locale].first
end
# Overload locale= to also set the I18n.locale. If the current I18n.config object responds
# to original_config, it means that it has a copy of the original I18n configuration and it's
# acting as proxy, which we need to skip.
def locale=(value)
if value
config = I18n.config.respond_to?(:original_config) ? I18n.config.original_config : I18n.config
config.locale = value
end
super(default_locale)
end
end
end
天色已晚,我就不深入研究了,反正路是这条路,还可以继续看 LookupContext
里的 self.register_detail
方法定义以及调用。
另外,Ruby 全局变量名是用 $
开头的,如果遇到一个看起来像变量但又有全局特性的“变量”的话,基本可以判断其实它是一个方法了。
另外,像这种生僻方法,还是减少使用比较好,增加同一项目共同维护者的负担。还是用 I18n.locale
就好了。
erb 是由 ruby 在服务器端渲染的时候才能执行的代码,而 js 代码是已经在浏览器端渲染执行的了,两个渲染时机是完全不同的。楼主还是没有消化我昨晚发的回复,同一个问题,没必要开那么多帖。