Rails 3: проблема с перенаправлением метода обновления - PullRequest
0 голосов
/ 03 апреля 2011

Попытка создать CMS для блога с использованием rails 3.
В моем rout.rb ...

namespace :admin do  
  resources :posts  
  root :to => "home#index"  
end

В Admin :: PostsController ...

def update
  @post = Post.find(params[:id])

  respond_to do |format|
    if @post.update_attributes(params[:post])
      format.html { redirect_to(@post,
                  :notice => 'Post was successfully updated.')}
      format.xml  { head :ok }
    else
      format.html { render :action => "edit" }
      format.xml  { render :xml => @post.errors,
                    :status => :unprocessable_entity }
    end
  end
end

Мне пришлось изменить первую строку admin / _form.html.erb из-за предыдущей ошибки 'undefined method', которая сводила меня с ума.Пытался указать браузеру на несуществующий "post_path".

<%= form_for(@post, :url => admin_posts_path(@post)) do |f| %>

Все остальные методы для сообщений работают должным образом.После отправки формы (обновления) - сервер rails ...

Started POST "/admin/posts.1"
ActionController::RoutingError (No route matches "/admin/posts.1"):

Во-первых, любопытно, почему он использует POST вместо PUT для обновления.

Во-вторых, я не могу понять, почему URL-адрес интерпретируется как "/admin/posts.1" и как его исправить.

Кто-нибудь еще сталкивался с этой проблемой?(и да, я внимательно следую инструкциям rubyonrails.org, чтобы помочь мне).Любая помощь будет принята с благодарностью.

РЕДАКТИРОВАТЬ:
Изменено admin_posts_path(@post) на admin_post_path(@post) за theIV .

сервер рельсов ...
NoMethodError (undefined method 'post_url' for #<Admin::PostsController:0x00000102b26ff8>): app/controllers/admin/posts_controller.rb:55:in 'block (2 levels) in update' app/controllers/admin/posts_controller.rb:53:in 'update'

1 Ответ

4 голосов
/ 03 апреля 2011

Я полагаю, вы должны ударить admin_post_path(@post), а не admin_posts_path(@post).

Посмотрите на таблицу, в которой перечислены все помощники, созданные для ваших маршрутов, на guides.rubyonrails.org .

РЕДАКТИРОВАТЬ: Кроме того, вы пробовали стиль массива URL-адресов? Это довольно удобно.

<%= form_for([:admin, @post]) do |f| %>

РЕДАКТИРОВАТЬ 2: я думаю, что "неопределенный метод post_url" от вашего обновления здесь:

format.html { redirect_to(@post,
              :notice => 'Post was successfully updated.')}

Также необходимо указать пространство имен:

format.html { redirect_to([:admin, @post],
              :notice => 'Post was successfully updated.')}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...