custom action in Rails 3

12 views
Skip to first unread message

Ichiro Saga

unread,
Sep 21, 2011, 2:58:03 PM9/21/11
to rubyonra...@googlegroups.com
Hi, everyone. I'm working on a program in Rails 3.0.10 and it has a
custom action, "run_files", that extracts data in files and saves it in
database. When I clicked the link on the page, it returned an error
page:
ActiveRecord::RecordNotFound in ReportsController#show
Couldn't find Report with ID=run_files

I wonder why Rails rendered show instead of the custom action.
Following is the view file, route file and the output of rake routes.

index.html.erb
<%= link_to "Process Files", :controller => 'reports', :action =>
'run_files' %>

routes.rb
match "reports/run_files" => "reports#run_files", :via => :post
resources :reports

output of rake routes
reports_run_files POST /reports/run_files(.:format)
{:controller=>"reports"
, :action=>"run_files"}
...
..

Thanks in advance.

--
Posted via http://www.ruby-forum.com/.

Tim Shaffer

unread,
Sep 21, 2011, 3:39:00 PM9/21/11
to rubyonra...@googlegroups.com
You have the route specified to only accept POST requests, but by using link_to, you're creating a hyperlink that generates a GET request.

You'll need to either change your routes to accept a GET request, or change your method of calling the URL to a POST request (from a form).

Ichiro Saga

unread,
Sep 21, 2011, 5:07:04 PM9/21/11
to rubyonra...@googlegroups.com
Tim Shaffer wrote in post #1023170:

Thanks Tim. I tried both and they work! But I noticed that it
generated one more sql query when a GET request's sent than that when a
POST request's sent.
<-[1m<-[35mSQL (0.0ms)<-[0m SELECT name FROM sqlite_master WHERE
type = 'table' AND NOT name = 'sqlite_sequence'

Where is it from and is it possible to skip it?

Tim Shaffer

unread,
Sep 22, 2011, 8:15:21 AM9/22/11
to rubyonra...@googlegroups.com
That query is nothing to worry about. It's just rails running a query to figure out which tables you have in your database so it can figure out which columns they have so it can make your models work properly.

In production it should only run once (when the server is first started). But then again you probably shouldn't be using sqlite in production.
Reply all
Reply to author
Forward
0 new messages