更新的帖子
我有一个带有自定义方法"refresh_table"的"uploads_controller.rb"文件
class UploadsController < ApplicationController
before_action :set_upload, only: [:show, :edit, :update, :destroy]
# GET /uploads
def index
@uploads = Upload.all
update_file_status
@uploads = Upload.all
end
# GET /uploads/1
def show
end
# GET /uploads/new
def new
puts "Running uploads/new"
@upload = Upload.new()
end
# GET /uploads/1/edit
def edit
end
# POST /uploads
def create
@upload = Upload.new(upload_params)
if @upload.save
@upload.update!(:status => "1")
@upload.update!(:f_path => "#{@upload.sourcedata.path}")
redirect_to uploads_url, notice: "Upload for #{@upload.task.name} was successfully created with file #{@upload.sourcedata_file_name}."
else
redirect_to tasks_url, alert: "*** ERROR *** Upload for #{@upload.task.name} did not go through successfully. #{@upload.errors.messages}"
end
end
# PATCH/PUT /uploads/1
def update
puts "Update method in Uploads controller received params = #{params.inspect}"
puts "params[:upload][:job] = #{params[:upload][:job].inspect}"
if (params[:upload][:job] == "parse")
puts "Passed params[:job]== "parse" "
redirect_to uploads_url, notice: "Parsing data from #{@upload.sourcedata_file_name}....."
@upload.delay.add_data_to_DB()
else
if @upload.update(upload_params)
redirect_to uploads_url, notice: "#{@upload.sourcedata_file_name} was updated"
else
redirect_to uploads_url, notice: "ERRRO #{@upload.sourcedata_file_name} could NOT be updated"
end
end
end
# DELETE /uploads/1
def destroy
@upload.destroy
redirect_to uploads_url, notice: 'Couldnt parse file #{@upload.sourcedata_file_name}'
end
# GET /uploads/refresh_table
def refresh_table
@uploads = Upload.all
update_file_status
@uploads = Upload.all
respond_to do |format|
format.html {redirect to 'index'}
format.js # template marked refresh_table.js.erb will be evoked
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_upload
@upload = Upload.find(params[:upload][:id])
end
# Only allow a trusted parameter "white list" through.
def upload_params
params.require(:upload).permit(:sourcedata, :task_id, :status, :f_path, :job)
end
def update_file_status
@uploads.each do |u|
if(File.exist?(u.f_path))
puts "File #{u.sourcedata_file_name} exists"
else
puts "File #{u.sourcedata_file_name} has been removed"
u.update!(:status => "-1")
end
end
end
end
routes.rb:
blah
blah
blah
resource :uploads do
member do
post "parse"
end
collection do
get "refresh_table", to: "refresh_table"
end
end
耙子路线:
blah
blah
parse_uploads POST /uploads/parse(.:format) uploads#parse
refresh_table_uploads GET /uploads/refresh_table(.:format) refresh_table#refresh_table
uploads POST /uploads(.:format) uploads#create
new_uploads GET /uploads/new(.:format) uploads#new
edit_uploads GET /uploads/edit(.:format) uploads#edit
GET /uploads(.:format) uploads#show
PATCH /uploads(.:format) uploads#update
PUT /uploads(.:format) uploads#update
DELETE /uploads(.:format) uploads#destroy
然后我重新启动了服务器,并尝试通过键入此作为 url 来测试路由是否有效
http://localhost:3000/uploads/refresh_table
这在浏览器中给了我一个错误:
ActionController::RoutingError at /uploads/refresh_table
uninitialized constant RefreshTableController
Local Variables
params
{:action=>"refresh_table", :controller=>"refresh_table"}
default_controller
true
controller_param
"refresh_table"
#<NameError: uninitialized constant RefreshTableController>
服务器日志 说:
Started GET "/uploads/refresh_table" for 127.0.0.1 at 2014-01-02 20:28:43 -0500
ActiveRecord::SchemaMigration Load (0.5ms) SELECT `schema_migrations`.* FROM `schema_migrations`
ActionController::RoutingError - uninitialized constant RefreshTableController:
还注意到上传的 routes.rb 中没有了"index"方法。
我该如何解决这个问题?谢谢
itsnikolay 响应没问题,但生成此 url : ' http://localhost:3000/upload/refresh_table
(使用上传而不是上传)
如果要使用http://localhost:3000/uploads/refresh_table
可以在路由文件中添加此行:
match 'uploads/refresh_table', to: 'upload#refresh_table', via: :get
希望这有帮助。
resource :uploads do
member do
post "parse"
end
collection do
get "refresh_table"
end
end
你的respond_to
块是罪魁祸首。
尝试:
respond_to do |format|
format.html { redirect_to uploads_path }
format.js # template marked refresh_table.js.erb will be evoked
end
redirect
不是你要找的,你想要redirect_to