Reputation: 293
I want to call this method in the controller
def setplaylist
@stream.programmed_at = Time.now.to_i
end
With this line from the view
<%= button_to 'Reprogram', @stream, :method => :setplaylist, :remote => true %>
I get a No routes match [POST] error.
Edit: My routes.rb file
Rails.application.routes.draw do
get 'splashpage/splash'
root :to => 'splashpage#splash', :as =>'splash'
resources :streams do
resources :videos
end
EDIT 2 rake routes
Prefix Verb URI Pattern Controller#Action
splashpage_splash GET /splashpage/splash(.:format) splashpage#splash
splash GET / splashpage#splash
stream_videos GET /streams/:stream_id/videos(.:format) videos#index {:member=>{:setplaylist=>:post}}
POST /streams/:stream_id/videos(.:format) videos#create {:member=>{:setplaylist=>:post}}
new_stream_video GET /streams/:stream_id/videos/new(.:format) videos#new {:member=>{:setplaylist=>:post}}
edit_stream_video GET /streams/:stream_id/videos/:id/edit(.:format) videos#edit {:member=>{:setplaylist=>:post}}
stream_video GET /streams/:stream_id/videos/:id(.:format) videos#show {:member=>{:setplaylist=>:post}}
PATCH /streams/:stream_id/videos/:id(.:format) videos#update {:member=>{:setplaylist=>:post}}
PUT /streams/:stream_id/videos/:id(.:format) videos#update {:member=>{:setplaylist=>:post}}
DELETE /streams/:stream_id/videos/:id(.:format) videos#destroy {:member=>{:setplaylist=>:post}}
streams GET /streams(.:format) streams#index {:member=>{:setplaylist=>:post}}
POST /streams(.:format) streams#create {:member=>{:setplaylist=>:post}}
new_stream GET /streams/new(.:format) streams#new {:member=>{:setplaylist=>:post}}
edit_stream GET /streams/:id/edit(.:format) streams#edit {:member=>{:setplaylist=>:post}}
stream GET /streams/:id(.:format) streams#show {:member=>{:setplaylist=>:post}}
PATCH /streams/:id(.:format) streams#update {:member=>{:setplaylist=>:post}}
PUT /streams/:id(.:format) streams#update {:member=>{:setplaylist=>:post}}
DELETE /streams/:id(.:format) streams#destroy {:member=>{:setplaylist=>:post}}
rake routes | grep setplaylist
stream_videos GET /streams/:stream_id/videos(.:format) videos#index {:member=>{:setplaylist=>:post}}
POST /streams/:stream_id/videos(.:format) videos#create {:member=>{:setplaylist=>:post}}
new_stream_video GET /streams/:stream_id/videos/new(.:format) videos#new {:member=>{:setplaylist=>:post}}
edit_stream_video GET /streams/:stream_id/videos/:id/edit(.:format) videos#edit {:member=>{:setplaylist=>:post}}
stream_video GET /streams/:stream_id/videos/:id(.:format) videos#show {:member=>{:setplaylist=>:post}}
PATCH /streams/:stream_id/videos/:id(.:format) videos#update {:member=>{:setplaylist=>:post}}
PUT /streams/:stream_id/videos/:id(.:format) videos#update {:member=>{:setplaylist=>:post}}
DELETE /streams/:stream_id/videos/:id(.:format) videos#destroy {:member=>{:setplaylist=>:post}}
streams GET /streams(.:format) streams#index {:member=>{:setplaylist=>:post}}
POST /streams(.:format) streams#create {:member=>{:setplaylist=>:post}}
new_stream GET /streams/new(.:format) streams#new {:member=>{:setplaylist=>:post}}
edit_stream GET /streams/:id/edit(.:format) streams#edit {:member=>{:setplaylist=>:post}}
stream GET /streams/:id(.:format) streams#show {:member=>{:setplaylist=>:post}}
PATCH /streams/:id(.:format) streams#update {:member=>{:setplaylist=>:post}}
PUT /streams/:id(.:format) streams#update {:member=>{:setplaylist=>:post}}
DELETE /streams/:id(.:format) streams#destroy {:member=>{:setplaylist=>:post}}
I am receiving a no method error after making Max's changes. undefined method setplaylist_stream_path.
Upvotes: 0
Views: 1055
Reputation: 32933
You need to add the setplaylist route. In your routes file, change this
resources :streams do
resources :videos
end
to
resources :streams, :member => {:setplaylist => :post} do
resources :videos
end
Now your button_to (which generates a post request by default, i think) should work. it's better to change the syntax to this:
<%= button_to 'Reprogram', setplaylist_stream_path(@stream), :remote => true %>
You'll also need to make sure that @stream is defined when your action code runs. You also probably want to save @stream after you've changed it. Change your action to
def setplaylist
@stream = Stream.find(params[:id])
@stream.programmed_at = Time.now.to_i
@stream.save
end
If this is all that it does, i would actually just do this in a call to the usual 'update' action rather than make a new action for it.
Upvotes: 1