ruby on rails - No route matches {:action=>"edit", :controller=>"admin/progresses"} missing required keys: [:id] -
while trying create edit link admin dashboard.i have error... no route matches {:action=>"edit", :controller=>"admin/progresses"} missing required keys: [:id]
please explain me what's wrong?
here rake routes
:
admin /admin(.:format) admin/dashboard#index admin_progresses /admin/progresses(.:format) admin/progresses#index post /admin/progresses(.:format) admin/progresses#create new_admin_progress /admin/progresses/new(.:format) admin/progresses#new edit_admin_progress /admin/progresses/:id/edit(.:format) admin/progresses#edit admin_progress /admin/progresses/:id(.:format) admin/progresses#show patch /admin/progresses/:id(.:format) admin/progresses#update put /admin/progresses/:id(.:format) admin/progresses#update delete /admin/progresses/:id(.:format) admin/progresses#destroy
this views/admin/progresses/index.html.slim
.container .row h2 pepito's dashboard br = link_to "new article", new_admin_progress_path, class:'btn btn-success' br br .dashboard - @progresses.each |progress| .row .col-xs-2 h4 = progress.title.capitalize .col-xs-2 h4 = progress.date .col-xs-5 h4 = truncate(progress.content, length: 90) .col-xs-1 = link_to 'view', progresses_path, class:'btn btn-success' .col-xs-1 = link_to 'edit', edit_admin_progress_path(@progress), class:'btn btn-primary' .col-xs-1 = link_to 'destroy', "#", class:'btn btn-danger', method: :delete hr
this admin/progresses_controller.rb:
class admin::progressescontroller < admin::applicationcontroller def index @progresses = progress.all end def new @progress = progress.new end def show @progress = progress.find(params[:id]) end def create @progress = progress.new(progress_params) respond_to |format| if @progress.save unless params[:progress_attachments].nil? params[:progress_attachments]['image'].each |a| @progress_attachment = @progress.progress_attachments.create!(:image => a) end end format.html { redirect_to admin_progresses_path, notice: 'progress created.' } else format.html { render action: 'new' } end end end def edit @progress = progress.find(params[:id]) end def destroy @progress = progress.find(params[:id]) end def update @progress = progress.find(params[:id]) if @progress.update(params[:progress].permit(:title, :date, :content, :main_image, progress_attachments_attributes: [:id, :progress_id, :image])) redirect_to progresses_path else render 'edit' end end private def progress_params params.require(:progress).permit(:title, :content, :date, :main_image, progress_attachments_attributes: [:id, :progress_id, :image]) end end
many ! :)
edit
thanks answers!
= link_to 'edit', edit_admin_progress_path(progress), class:'btn btn-primary'
worked !!
try changing
= link_to 'edit', edit_admin_progress_path(@progress), class:'btn btn-primary'
to
= link_to 'edit', edit_admin_progress_path(progress), class:'btn btn-primary'
the variable want use not instance variable, it's local variable
@progresses.each |progress|
Comments
Post a Comment