Вызов метода из кнопки и передача параметров в Ruby rail

#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 , or update ), обязательно придумайте что-нибудь новое, но если вы можете придумать способ, как это сделать, обычно лучше оставить его универсальным.