我目前正在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
答案 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请求。
基本上你需要这样的东西
<%= form_for(@new_reservation, remote: remote) do |new_res| %>
将异步发送数据,您将创建预留,并呈现视图以进行显示