That worked. I was just testing wrong. Thanks. On Friday, August 23, 2013 9:30:31 AM UTC-7, Rob Kaufman wrote: > > 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]<javascript:>) > 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 >> >> <https://github.com/schneems/wicked/wiki/Building-Partial-Objects-Step-by-Step>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_idyet 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] <javascript:> > 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] <javascript:>. > 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.
