Rails: маршрутизация и форма для пользовательского метода контроллера - PullRequest
1 голос
/ 18 марта 2019

Я получаю эту ошибку при попытке создать страницу с подробными сведениями о комнате. Нажатие на редактирование вызовет всплывающее окно с предварительно заполненными значениями выбранной комнаты. И нажав сохранить в окне обновит данные для этой записи.

Я не совсем уверен, как заранее определить идентификатор, в настоящее время я использую jQuery для заполнения формы текущими данными выбранных записей.

No route matches {:action=>"save_details", :controller=>"rooms"}, missing required keys: [:id]

Номера / index.html.erb

<%= form_for(@room, url: save_details_room_path) do |f| %>
        <% f.text_field :id, id:'edit-room-id', class:'d-none' %>
        <% f.text_field :name, id:'edit-room-name' %>
        <% f.text_area :desc, id:'edit-room-desc', style:'width: 90%; height: 8em; resize: none; float: bottom' %>

        <%= f.submit 'Save', :class=>'btn btn-primary' %>
    <% end %>

rooms_controller.rb

def save_details
    logger.info ('Hello world')
    @room= Room.find(params[:id])
    @room.name = params[:name]
    @room.description = params[:desc]

    @room.save
    redirect_to rooms_url
end

def show
    @room = Room.find(prams[:id])
end

def index
    @room = Room.all
end

routes.rb

resources :rooms do
    get :save_details, on: :member
end

main.js

    const name = $(this).data('name');
    const desc = $(this).data('description');
    const id = $(this).data('id');

    $('#edit-room-id').val(id);
    $('#edit-room-name').val(name);
    $('#edit-room-desc').val(desc);

1-е РЕДАКТИРОВАНИЕ:

Теперь я делаю это другим способом, который заключается в простом прохождении формы через URL, например. / Комнаты / save_details? ID = 1, имя = 123, убывание = 1234. Однако форма просто направляет его в стандартные методы show / index в моем контроллере. В любом случае, чтобы направить его напрямую в метод save_details? Выполнение ниже просто возвращает ошибку, которая говорит, что save_details не существует как идентификатор. Также отредактировал мои маршруты

новые маршруты.рб

    get     '/rooms/save_details/:id/:name/:desc' => 'rooms#save_details', :as => 'save_details'

index.html.erb

<form action="rooms/save_details" method="get">
    ....
</form>

Ответы [ 3 ]

0 голосов
/ 18 марта 2019

В вашем помощнике по маршруту отсутствует параметр :id.Вам нужно сделать:

<%= form_for(@room, url: save_details_room_path(id: @room.id)) do |f| %>

И, как предположил Asthmatic, это должен быть маршрут :post, если на него отправляется форма.

Похоже, вы используетеjQuery, чтобы заполнить идентификатор комнаты, так что вам, возможно, придется пропустить помощника по форме Rails в пользу простой формы HTML.В этом случае вам нужно будет создать и добавить атрибут action после того, как вы получите номер комнаты.

0 голосов
/ 18 марта 2019

Наконец-то решил эту проблему, используя обычную HTML-форму и добавив следующее в route.rb

get '/rooms/save_details/:id/:name/:desc' => 'rooms#save_details', :as => 'save_details'

resources :rooms do
    get 'save_details', on: :collection
end
0 голосов
/ 18 марта 2019

Похоже, вы пытаетесь сохранить форму, вероятно, это не должно быть get

resources :rooms do
    post :save_details, on: :member
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...