gpt4 book ai didi

ruby-on-rails - 获取/创建/更新/销毁公用文件夹文件的 Controller

转载 作者:数据小太阳 更新时间:2023-10-29 08:12:19 26 4
gpt4 key购买 nike

我正在开发 Rails 应用程序。我正在尝试编写一个 Controller ,该 Controller 可以访问 Rails 的公共(public)文件夹的文件。我现在有点卡住了。

我正在尝试做的是我的 FileController 上的 get 方法。

那会得到一个变量“path”,对应文件路径,读取rails公用文件夹中的文件。

我想修改 routes.rb,因为当我发出“/file/path/to/htmlpage”的 GET 请求时,请求将文件的内容发回给我,例如 HTML 文件的字符串。

编辑:问题是需要这样的 REST url。

  • show => GET/file/:path
  • 创建 => POST/file/:path
  • 更新 => PUT/file/:path
  • 销毁 => 删除/file/:path

所以我删除了我的旧路线并放置

resources :files

我以前的路线就是这样

  #get "file/:path" => 'file#get', as: :get
#get "file/create/*path" => 'file#create', as: :create
#post "file/create/*path/:content" => 'file#create', as: :create_content
#get "file/update/*path/:content" => 'file#update', as: :update
#get "file/destroy/:path" => 'file#destroy', as: :destroy

我的 Controller 可能有点奇怪,我需要一些建议。

class FileController < ApplicationController

# get "file/:path"
def show
path = params[:path]
if File.exists?( Rails.public_path.join( "#{path}.html" ) )
@content = File.read( Rails.public_path.join( "#{path}.html" ) )
puts @content
else
puts "The file you want to access doesn't exist"
end
end

# get "file/create/:path"
# post "file/create/*path/:content"
def create
path = params[:path]
content = params[:content]
if File.exists?( Rails.public_path.join( "#{path}.html" ) )
puts "The file you want to create already exist"
else
File.write(Rails.public_path.join( "#{path}.html" ), "#{content}")
end
end

# get "file/update/*path/:content"
def update
path = params[:path]
content = params[:content]
if File.exists?( Rails.public_path.join( "#{path}" ) )
File.write(Rails.public_path.join( "#{path}" ), "#{content}")
else
puts "The file you want to update doesn't exist"
end
end

# get "file/destroy/:path"
def destroy
path = params[:path]
if File.exists?( Rails.public_path.join( "#{path}.html" ) )
File.delete( Rails.public_path.join( "#{path}.html" ) )
else
puts "The file you want to delete doesn't exist"
end
end
end

但现在它不工作了,我想我的路由和 Controller 有问题,它们没有以正确的方式通信。但我不明白我该怎么做。我没有文件模型,因为我看不到我想做的事情的必要性。

谢谢你的帮助

最佳答案

试试这个:

# FileController

def action_name
#check and filter here your path param, something like:
path = params[:path].gsub /[^a-z0-9\.\/]+/, ''
if File.exists?( Rails.root.join( "public/#{path}" ) )
@content = File.read( Rails.root.join( "public/#{path}" ) )
end
end

关于ruby-on-rails - 获取/创建/更新/销毁公用文件夹文件的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23496650/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com