Использование post с link_to

#ruby-on-rails #ruby #ruby-on-rails-3 #routes

#ruby-on-rails #ruby #ruby-on-rails-3 #маршруты

Вопрос:

У меня есть этот маршрут:

 avatar_add_from_collection POST   /avatars/:avatar_id/add_from_collection(.:format)            {:action=>"add_from_collection", :controller=>"avatars"}
  

и я пытаюсь создать ссылку с помощью link_to, которая использует post. Причина, по которой мне нужно это сделать, заключается в том, что (по-видимому) вы не можете поместить изображение на кнопку с помощью button_to .

 <%= link_to inline_avatar(avatar.fetch_avatar_image(:thumb)), add_from_collection_avatar_path(avatar),:method=>:post%>
  

вызывает

 No route matches "/avatars/3/add_from_collection"
  

Если я изменю файл routes, чтобы сделать это GET, он будет работать просто отлично.

Link_to выглядит следующим образом

 link_to inline_avatar(avatar.fetch_avatar_image(:thumb)), avatar_add_from_collection_path(avatar),:method=>:post
  

Редактировать:

 Jade::Application.routes.draw do

  resources :avatar_categories do
    delete :remove_item
  end

  resources :avatars do
    member do
     post 'add_from_collection', :on=>:member
    end
  end

  resources :categories,:addresses,:calendars,:topics,:profile,:news,:account_setting
  resources :boards do
    member do
      get :move
      post :move_category
    end
  end

  post 'avatars/display_collection'
  get "user/index"
  get 'login/index'
  get 'login/new'
  post 'login/create'
  post 'login/authenticate'
  get 'login/forgot_password'
  put 'login/reset_password'
  get 'login/logout' #post?
  get 'admin/index'
  get 'admin/app_settings'
  get 'admin/user_settings'
  get 'admin/avatars'
  post 'admin/avatar_upload'
  post 'admin/update_app_settings'
  get 'news_configurations/index'
  put 'news_configurations/update'
  get 'message_board_configurations/index'
  put 'message_board_configurations/update'
  get 'profile_settings/edit'
  post 'profile_settings/update'

  resources :posts do
    get :new,:edit
    post :create,:update,:destroy
  end

  match '/login' => 'login#index', :as => 'login'
  match '/admin' => 'admin#index', :as => 'admin'

  resources :login do
    get :index
    post :authenticate,:logout
  end
root :to => "news#index"

end
  

Комментарии:

1. Я создал сообщение avatar_add_from_collection / avatars/:avatar_id/add_from_collection(.:format) {:action=> «add_from_collection», : controller =>»avatars»}, сгенерированное из ресурсов : аватары завершают сообщение ‘add_from_collection’

2. вы должны указать :as параметр

3. Ваш второй фрагмент кода такой же, как первый. Вы неправильно вставили его?

Ответ №1:

 resources :avatars do 
  member do
    post 'add_from_collection'
  end
end
  

или

 resources :avatars do 
  post 'add_from_collection', :on => :member
end
  

Редактировать

Это неправильно

 resources :avatars do
  member do
   post 'add_from_collection', :on=>:member
  end
end
  

используйте это

 resources :avatars do
  post :add_from_collection, :on=>:member
end
  

Но, похоже, это не поможет

Комментарии:

1. Это фактически ухудшило ситуацию, поскольку button_to не работает ни с одним из них, и та же ошибка no route с link_to

2. покажите, как вы пытаетесь это сделать. публикуйте исходники. ошибка post. дополнительная информация

3. Те же ошибки, что я опубликовал в исходном сообщении. Исходники те же, за исключением пути, измененного на add_from_collection_avatar. Причина, по которой button_to сломался, заключалась в том, что :avatar_id изменился на :id с использованием блока member

4. <a href=»/avatars/2/add_from_collection» data-method=»post» rel=»nofollow»><скрипт>document.write(‘<img src=»данные: изображение / gif;base64,R0lGODlhSwBLAP…=n»>’);</script></a>

5. У меня похожие проблемы с link_to.. Кажется, что способ обойти это — использовать button_to ..