2013-04-08 160 views
2

我想用這種方式來編輯存儲在硬盤文件使用Rails: 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)???

這是問題,如何將編輯後的文本再次傳遞給控制器​​並保存更改。 如果你對整個過程有更好的想法,你可以傳遞所有有用的代碼。

回答

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應該工作。我將保留文件名的編碼並設置路由給你。