ruby - Rails 4 - routing actions for contact form -
ruby - Rails 4 - routing actions for contact form -
i have 2 actions in controller:
def study @user = user.find_by_slug(params[:slug]) end def reportform @user = user.find_by_slug(params[:slug]) thread.new mail service = ... end @message = 'thanks!' end and in routes:
# user study form "/user/:slug/report", to: "users#report" # grab study form , action post "/user/:slug/report", to: 'users#reportform' and view:
<form method="post" action="/user/<%= @user.slug %>/reportform"> ... but problem is, when send form, action reportform not called , instead of refresh current page form.
what's wrong here?
thank guys.
form helpers
the first thing that's wrong you're not using form helpers rails provides - problem because you'll end niggly little problems 1 you're receiving:
#config/routes.rb resources :users :report #-> domain.com/users/:id/report post :reportform #-> domain.com/users/:id/reportform end #view <%= form_tag user_reportform_path(@user) %> ... <% end %> routes
the sec issue have routes
you've set next routes:
get "/user/:slug/report", to: "users#report" post "/user/:slug/report", to: 'users#reportform' this means you've got send request domain.com/user/user_slug/report. form sends url reportform...
you should see routes above solution problem
but more importantly, should read on nested resources:
#config/routes.rb resources :users match :report, action: "reportform", via: [:get, :post] #-> domain.com/users/:id/report end slug
finally, you're trying utilize params[:slug] in controller
with resourceful routes should using in rails, you'll passing params[:id] of time. should not issue (what contained in params[:id] can anything).
i highly recommend looking @ gem called friendly_id, makes including slugs in application lot simpler:
#app/models/user.rb class user < activerecord::base extend friendlyid friendly_id :name, use: [:slugged, :finders] end this allow call:
#app/controllers/users_controller.rb class userscontroller < applicationcontroller def reportform user.find params[:id] #-> utilize either `id` or `slug` end end ruby-on-rails ruby post get routes
Comments
Post a Comment