Hi Hillary, I'm sorry, I thought you were doing a POST to get to create. I'm betting the app is going to #new instead of #create. Since you're actually writing to the DB you'd like the links to it to be posts so that crawlers and bots won't create empty records. Putting the url in the url bar will always do a GET and not a POST. Try:
= button_to "Build Goal", '/goals/building/build', :method => :post on a page and then click the link. Rob On August 22, 2013 at 21:08:39 , Hillary Hueter ([email protected]) wrote: so i must be doing something wrong. I put this in my routes.rb post '/goals/building/build(.:format)', :to => "goals/build#create" and when i enter "http://localhost:3000/goals/building/build" in the browser, it seems to be going through the create action def create @goal = Goal.create redirect_to wizard_path(steps.first, :goal_id => @goal.id) end because it is redirecting me to the first step of the wizard. But it doesn't create a blank goal and the :goal_id parameter isn't being overwritten so i'm getting a "Can't Find Goal with ID=building" error. There are no errors in the create action. Below is the full controller. class Goals::BuildController < ApplicationController include Wicked::Wizard steps :length, :type, :info before_filter :set_goal_id, only: [:show, :update] def show render_wizard end def update params[:goal][:user_id] = current_user.id params[:goal][:status] = step.to_s params[:goal][:status] = 'active' if step == steps.last @goal.update_attributes(goal_params) render_wizard @goal end def create @goal = Goal.create redirect_to wizard_path(steps.first, :goal_id => @goal.id) end def finish_wizard_path dashboard_path end protected def set_goal_id @goal = Goal.find(params[:goal_id]) end def goal_params params here end end On Monday, August 19, 2013 11:28:03 AM UTC-7, Rob Kaufman wrote: Hi Hillary, What they are proposing could be accomplished one of two ways. 1) Adding a route to your routes file post '/goals/building/build(.:format)', :to => "goals/build#create" 2) modifying to_param to look something like this app/models/goal.rb class Goal def to_param if new_record? 'building' else super end end end I would go with option 1 since it would have fewer side effects. Rob On August 18, 2013 at 12:17:13 , Hillary Hueter ([email protected]) wrote: I'm trying to build an object using a wicked wizard. One part of the walkthrough on the wiki that's confusing me is this paragraph: This also means to get to the create action we don't have a product_id yet so we can either create this object in another controller and redirect to the wizard, or we can use a route with a placeholder product_id such as [POST] /products/building/build in order to hit this create action. So i get that i have to create a blank product (or in my case a goal) so that i'll have an id that can be used by the show and update actions. I don't really want to start the wizard off in another controller, because that doesn't really make sense since the first step of the wizard is choosing a type and not entering the minimally viable information for that object. So i'd like to do the route with the placeholder that creates the object and then re-directs to the first step of the wizard. However i'm very confused about how to link to the create action from the Users dashboard page, or for testing what url to enter into the address bar. This is my controller class Goals::BuildController < ApplicationController include Wicked::Wizard steps :goal_length, :goal_type, :goal_info def show @goal = Goal.find(params[:goal_id]) render_wizard end def update @goal = Goal.find(params[:goal_id]) @goal.update_attributes(params[:goal]) render_wizard @goal end def create @goal = Goal.create Rails.logger info @goal.id redirect_to wizard_path(steps.first, :goal_id => @goal.id) end protected def goal_params params[:goal].permit(:name, :amount, :end_date, :goal_type, :goal_term, :on_going) end end My routes.rb has the following entry: resources :goals do resources :build, controller: 'goals/build' end These are the routes generated by that entry: POST /goals/:goal_id/build(.:format) goals/build#create new_goal_build GET /goals/:goal_id/build/new(.:format) goals/build#new edit_goal_build GET /goals/:goal_id/build/:id/edit(.:format) goals/build#edit goal_build GET /goals/:goal_id/build/:id(.:format) goals/build#show -- -- SD Ruby mailing list [email protected] http://groups.google.com/group/sdruby --- You received this message because you are subscribed to the Google Groups "SD Ruby" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out. -- -- SD Ruby mailing list [email protected] http://groups.google.com/group/sdruby --- You received this message because you are subscribed to the Google Groups "SD Ruby" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out. -- -- SD Ruby mailing list [email protected] http://groups.google.com/group/sdruby --- You received this message because you are subscribed to the Google Groups "SD Ruby" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
