在Rails中编辑文件(使用文本区域)

时间:2013-04-08 21:56:40

标签: ruby-on-rails ruby file text web

我想以这种方式用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)???

问题是如何将编辑后的文本再次传递给控制器​​并保存更改。 如果您对整个过程有更好的了解,可以传递所有有用的代码。

1 个答案:

答案 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应该有效。我将保留文件名的编码并为您设置路线。