#ruby-on-rails #ruby
#ruby-on-rails #ruby
Вопрос:
Я новичок в ruby, и одна из вещей на моей странице, которую я пытаюсь сделать, — это принимать входные данные от пользователя и при нажатии кнопки хотеть вызвать метод для обработки.
Контроллер выглядит так
def index
//code
end
def create
//code
end
def doSomeAction
//This is where I want to process
end
Это представление
<%= form_tag(project_path, multipart: true, class: 'form-inline', role: 'form') do %>
<%= button_tag 'upload batch file', class: 'btn btn-primary' %>
<%= link_to 'Reports Index', reports_path %>
<% end %>
<%= text_field "item", "ids", "size" => 20 %>
<%= button_to 'Call Action', method: "doActionTest" %>
Это маршруты
Rails.application.routes.draw do
resources :browse_items, only: [:index, :show]
resources :reports, only: [:index, :show]
resources :project, only: [:index, :create, :show]
root to: "project#index"
end
Как сопоставить кнопку с doActionTest и как передать значение из текстового поля этому методу?
Ответ №1:
Вам нужно настроить маршрут, указывающий на это действие внутри этого контроллера.
В вашем файле config / routes.rb вы должны добавить
post 'doSomeAction', to: 'ControllerNameHere#doSomeAction', as: 'do_some_action'
Затем в вашем form_tag вы хотите изменить URL-адрес, на который он указывает, с « project_path
на: do_some_action_path
Затем измените кнопку, которую вы должны: <%= button_to 'Call Action', method: :post %>
Метод, который они хотят явно указать, — это HTTP-запрос (например, get, put, post и т. Д.), А не действие в вашем контроллере.
В качестве дополнительного примечания имя вашего действия не должно быть выделено буквами, а вместо этого разделено подчеркиванием. если вы хотите следовать рекомендациям ruby, вам следует указать имя действия do_some_action
(если вы это сделаете, убедитесь, что вы соответствующим образом изменили маршруты)
Комментарии:
1. Хороший момент в отношении соглашений об именовании, но, кроме того, создавать произвольные конечные точки — плохая идея, если у вас нет очень веской причины. Если он не соответствует действию REST (например
create
, orupdate
), обязательно придумайте что-нибудь новое, но если вы можете придумать способ, как это сделать, обычно лучше оставить его универсальным.