В настоящее время я создаю веб-сайт на Rails, который позволит пользователю создавать и создавать учетные записи, а затем при входе в систему он / она получит список всех «комнат» в базе данных. И тогда пользователь сможет забронировать одну из комнат. Как система бронирования.

Итак, сначала, когда пользователь вошел в систему, он будет перенаправлен на индекс букера контроллера. Это позволит получить все комнаты из базы данных и отобразить информацию в таблице.

Ситуация модели строится так же, как у пользователя есть_множество резервирований и резервирование принадлежит_пользователю.

Поэтому я хочу, чтобы рядом с таблицей (может быть в той же строке) была кнопка щелчка. И когда пользователь нажимает кнопку, резервирование создается и связывается с пользователем, не покидая текущей страницы. Атм вот что я придумал (в index.html.erb)

<%= form_for(@new_reservation) do |new_res| %>
  <% @all_rooms.each do |r| %>
      <tr>
        <td><%= r.room %></td>
        <td><%= r.room_size %></td>
        <td><%= r.building %></td>
        <td><%= r.room_description %></td>
        <td><%= new_res.submit  "Create" %></td>
      </tr>
   <% end %>         
<% end %> 

И мой контроллер выглядит как

class BookerController < ApplicationController
  before_action :require_user, only: [:index, :show]

  def index
    @new_reservation = Reservation.new
    @all_rooms = Room.all
  end

  def create
  end
end

И маршрут

Rails.application.routes.draw do
#Log in / Logout functionality 
get '/login' => 'sessions#new'
post 'login' => 'sessions#create'
delete 'logout' => 'sessions#destroy'
#The start screen
root 'welcome#index'
#The signup
get '/signup'  => 'users#new' 
get '/book' => 'booker#index'
resources :users
resources :reservations
1
Labba 3 Май 2016 в 18:30

2 ответа

Лучший ответ

Для этого вам понадобится несколько вещей:

  • Если вы хотите, чтобы ваш пользователь оставался на странице, вам нужно сделать форму асинхронный с remote: true
  • Если вы хотите создать резервирование в своем методе BookerController#create, оно должно быть доступно с помощью HTTP POST
  • Простой и понятный способ сделать это - иметь в вашем представлении форму для каждого потенциального бронирования, которое может сделать пользователь.

Рабочий пример:

Приложение / просмотров / букер / index.html.erb

<% @all_rooms.each do |r| %>
<tr>
  <td><%= r.room_size %></td>
  <td><%= r.building %></td>
  <td><%= r.room_description %></td>
  <td>
    <%= form_for(Reservation.new, remote: true, format: :js, url: {controller: "booker", action: "create"}) do |new_res| %>
    <%= new_res.hidden_field :room_id, value: r.id %>
    <%= new_res.hidden_field :user_id, value: current_user.id %>
    <%= new_res.submit  "Book" %>
    <% end %>
  </td>
</tr>
<% end %>

Здесь замените current_user.id тем, что дает вам имя текущего пользователя, вошедшего в систему

Приложение / контроллеры / booker_controller.rb

class BookerController < ApplicationController

  def index
    @all_rooms = Room.all
  end

  def create
    new_reservation = Reservation.new(reservation_params)
    new_reservation.save
    respond_to do |format|
      format.json { head :no_content }
    end
  end

  private 
  def reservation_params
    params.require(:reservation).permit(:room_id, :user_id)
  end
end

Приложение / Config / routes.rb

Rails.application.routes.draw do

  get '/book' => 'booker#index'
  post '/book' => 'booker#create'

end
1
babgyy 3 Май 2016 в 16:16

И когда пользователь нажимает кнопку, резервирование создается и связывается с пользователем, не покидая текущей страницы.

Вам нужно узнать, как делать запросы Ajax в Rails.

http://ericlondon.com/2014/03/13/rails-4-submit-modal-form-via-ajax-and-render-js-response-as-table-row.html

В основном вам понадобится что-то вроде этого

<%= form_for(@new_reservation, remote: remote) do |new_res| %>

Что будет отправлять данные асинхронно, вы создадите резервирование и визуализируете представление для отображения

0
coderVishal 3 Май 2016 в 16:03