我是一名学生,目前正在注册信息技术课程,并且已经获得了一个项目,需要我的团队和我使用Rails 3 + Ruby 1.9.2创建动态表单构建器。此动态表单构建器的一个关键功能是用户可以导出其表单的结果。使用Ruby 1.9+ API中定义的CSV类实现CSV功能并没有太大成功。我在form_results控制器中定义了一个“导出”功能,目前我正在尝试写入CSV文件。我的导出功能如下所示:
def export
CSV.open("/public/results/results.csv", "wb") do |csv|
csv << ["sample", "data"]
end
end
在视图中,我使用以下命令链接到该函数:
<%= link_to 'Download CSV', form_form_results_path(@form), :method => :export %>
我觉得如果我能让CSV类的实现正常工作,我将能够完成剩余的逻辑而不会出现任何严重问题。任何指导,输入或帮助将不胜感激。
谢谢,
Maz M。
答案 0 :(得分:2)
您对:method
参数的使用不正确。这应该用于指定http动词。文档在这里:
http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to
我建议在他们查看动态表单的操作中使用respond_to
块,并使用format.csv
。这允许您使用相同的操作,但仅通过调用附加到URL的.csv的操作URL来以不同的格式呈现结果
respond_to do |format|
format.html
format.csv { render :text => @dynamic_form.to_csv} #this will return txt in browser
#format.csv { render :csv => @dynamic_form.to_csv} #with mime type (should prompt browser download)
end
然后在您的表单模型中,您可以创建一个to_csv def,它将呈现csv并将其作为字符串返回。你真的不应该在你的控制器中放置这样的逻辑。控制器用于创建实例变量(创建逻辑应在模型中完成)并转发到适当的视图。该模型应包含大部分逻辑。谷歌“瘦子控制器,脂肪模型”获取更多信息。
def to_csv
csv = some_logic_here_to_create_csv_string
csv
end
你的link_to调用可能看起来像这样(只是把它写在我的头顶..我不记得这是否是正确的语法):
<%= link_to 'Download CSV', form_form_results_path(@form, :format=>:csv) %>
答案 1 :(得分:1)