gpt4 book ai didi

ruby-on-rails - 如果票证存在 ruby ,如何检查数据库?

转载 作者:太空宇宙 更新时间:2023-11-03 16:45:38 27 4
gpt4 key购买 nike

我正在使用 ruby​​ 开发餐厅系统,目前正在使用票务 Controller 进行设置,每次用户单击“添加到票证”时,它每次都会创建一张新票证。我希望这样做,所以当用户单击“添加到票证”时,它会检查数据库中是否存在票证,如果不存在,则创建一个新票证,如果存在,则将其添加到同一张票证中。我不太确定如何处理它。

class TicketController < ApplicationController


def addToTicket
session[:tableID] = "15"
unless defined? check
check = Ticket.create(
table: session[:tableID],
tax: "8.25",
tstatus: 0
)
session[:ticket] = check
puts("**********Ticket created************")
redirect_to guest_path
else
check.orderItems.create(
item: (MenuItem.find_by id: params[:item_id]),
ingredients: params[:good_ingredients],
notes: params[:notes],
istatus: 0
)
session[:ticket] = check
puts("**************Ticket added to***********")
redirect_to guest_path
end
end

最佳答案

您可以使用 validations 来完成此操作在你的模型中:

#app/models/user.rb
class User < ActiveRecord::Base
has_many :tickets
end

#app/models/ticket.rb
class Ticket < ActiveRecord::Base
belongs_to :user
belongs_to :table
validates :table, uniqueness: { scope: :user } # You didn't provide much context so this is quite generic
end

#app/models/table.rb
class Table < ActiveRecord::Base
has_many :tickets
has_many :users, through: :tickets
end

这允许您使用以下内容:

#config/routes.rb
resources :tables do
resources :tickets
end

#app/controllers/tickets_controller.rb
class TicketsController < ApplicationController
def new
@table = Table.find params[:table_id]
@ticket = current_user.tickets.new(table: @table)
end

def create
@table = Table.find params[:table_id]
@ticket = current_user.tickets.new ticket_params
@ticket.save
end

private

def ticket_params
params.require(:ticket).permit(:tax, :tstatus, :table_id).merge(table_id: @table.id)
end
end

注意事项

在你的 Controller 中输出不是一个好主意(puts)...除非你非常喜欢检查你的日志。

认为您正在尝试调用 flash方法:

def create
flash[:success] = "Ticket Created"
end

--

您还需要确保从 View 中调用正确的操作...

您当前正在使用 addToticket(应该在 snake_case 中)- 相当于 update。我建议您独立使用 new/createupdate 操作,而不是您拥有的操作:

#app/controllers/tables_controller.rb
class TablesController < ApplicationController
def show
@table = Table.find params[:id]
@ticket = current_user.tickets.find_by(table_id: params[:id]) || current_user.tickets.new(table: @table)
end
end

#app/controllers/tickets_controller.rb
class TicketsController < ApplicationController
def create
@table = Table.find params[:id]
@ticket = current_user.tickets.new ticket_params
redirect_to @table if @ticket.save
end

def update
@table = Table.find params[:id]
@ticket = current_user.tickets.new ticket_params
## more logic here
redirect_to @table if @ticket.save
end

private

def ticket_params
params.require(:ticket).permit(:tstatus, :etc, :etc).merge(table_id: @table.id)
end
end

#app/views/tables/show.html.erb
<%= form_for [@table, @ticket] do |f| %>
<%= f.text_field :tstatus %>
....
<%= f.submit %>
<% end %>

上面的代码将调用一个表单并根据 Table 模型用适当的字段填充它。 真正很酷的是,如果您将其设置为如果不存在票证,将调用模型的"new"实例,将提交发送到 create 操作, 否则 更新

关于ruby-on-rails - 如果票证存在 ruby ,如何检查数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33341415/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com