【问题标题】:Room booking system newbie logic rails房间预订系统新手逻辑导轨
【发布时间】:2016-05-03 15:30:16
【问题描述】:

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

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

模型情况是建立起来的,就像用户有_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

【问题讨论】:

  • 你有什么问题?
  • 我要如何完成才能在 /book 网站上从房间列表中预订其中一间。因此,a 预订被创建并链接到用户。在不离开页面的情况下,我仍然希望用户在此页面上,因为它是登录时的主页。

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


【解决方案1】:

您需要做一些事情来实现这一点:

  • 如果您希望您的用户留在页面上,您需要制作您的表单 与 remote: true 异步
  • 如果您想在 BookerController#create 方法中创建 Reservation,则需要通过 HTTP POST 访问它
  • 一种简单直接的方法是在您的视图中为用户可能进行的每个潜在预订提供一个表单

工作示例:

app/views/booker/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 替换为您当前登录的用户

app/controllers/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

app/config/routes.rb

Rails.application.routes.draw do

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

end

【讨论】:

    【解决方案2】:

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

    您需要了解如何在 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| %>
    

    这将异步发送数据,您将创建预留,并渲染视图以供显示

    【讨论】:

      猜你喜欢
      • 2012-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多