我想以这种方式用Rails编辑存储在HDD上的文件: 1.打开文件并将内容加载到'text_area'(或我可以编辑它的任何其他字段) 2.编辑'text_area'中的内容 3.保存对该文件的更改
我在这里有一些代码:
1)[控制器]
def show @myfile = File.read("/home/pi/www/web-svn/repositories/Repo2/hooks/post-commit.tmpl") end
2)[查看]
<%= text_area_tag(:message, @myfile, :size => "100x60") %>
3)???
问题是如何将编辑后的文本再次传递给控制器并保存更改。 如果您对整个过程有更好的了解,可以传递所有有用的代码。
答案 0 :(得分:2)
在控制器的edit()方法中,从URL确定文件名,并将指定文件中的文件内容读入实例变量(@myfile)。渲染视图,该视图传递给浏览器,由用户编辑,编辑后的文本作为POST数据传递回服务器。 Rails将POST数据放入params散列并调用控制器的update()方法。在update()中,文件名由URL确定,其修改后的内容从params散列中检索并写入文件。泡沫,冲洗,重复。
添加了:
这是我的头脑和未经测试,因此将其视为伪代码,但它应该让你朝着正确的方向前进。我确信设计可以改进。
您的form_tag
应如下所示。它指定控制器,操作以及请求返回服务器的方法。出现:file
是因为RESTful路由应指定要更新的资源(参见下文)。
form_tag({:controller => :hooks, :action => :update, :file => @myfilename}, {:method => :put}) do
[...]
end
那么,如何将文件名传递给浏览器,以便它可以返回更新请求?在一个RESTful设计中,您的网址可能看起来像/hooks/:action/:file
。 :file
的值将指定文件资源,如果您设置路由以使用此表单,则控制器中将显示params[:file]
。让你的控制器
def edit
@myfilename = params[:file]
@myfile = File.read(@myfilename)
end
然后上面的form_tag应该有效。我将保留文件名的编码并为您设置路线。