2

我想用 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)???

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

4

1 回答 1

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 设计中,您的 URL 可能看起来像/hooks/:action/:file. 的值:file将指定文件资源,如果您设置路由以使用此表单,params[:file]则将在您的控制器中可用。让你的控制器做

def edit
    @myfilename = params[:file]
    @myfile     = File.read(@myfilename)
end

然后上面的 form_tag 应该可以工作。我将保留文件名的编码并为您设置路线。

于 2013-04-08T22:25:52.220 回答