房间预订系统newbie logic rails

时间:2016-05-03 15:30:17

标签: ruby-on-rails ruby ruby-on-rails-4

我目前正在Rails中创建一个允许用户创建和帐户的网站,然后在登录时,他/她将获得所有"房间的列表"在数据库中。然后用户将能够预订其中一个房间。像预订系统。

因此,首先,当用户登录时,它将被重定向到控制器预订者索引。这将从数据库中获取所有房间并在表格中显示信息。

模型情境像User has_many预订一样建立,预订属于用户。

所以我想做的是在桌子旁边(可以在同一行),应该有一个点击按钮。当用户点击按钮时,创建预订并链接到用户而不离开当前页面。 Atm这就是我提出的(在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

2 个答案:

答案 0 :(得分:1)

您需要做一些事情才能实现这一目标:

  • 如果您希望用户留在页面上,则需要制作表单 与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

应用程序/配置/ routes.rb中

Rails.application.routes.draw do

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

end

答案 1 :(得分:0)

  

当用户点击按钮时,会创建预订并链接到用户,而不会离开当前页面。

您需要了解如何在Rails中创建Ajax请求。

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| %>

将异步发送数据,您将创建预留,并呈现视图以进行显示