gpt4 book ai didi

ruby-on-rails - Rails 4 将现有/以前的记录值传递给新记录

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

我会尽可能详尽地解释这一点。我试图弄清楚通过表单将不应被篡改的现有数据作为隐藏值传递的最佳方式是什么——或者是否有更好的方式将 Rails 上的数据发送到新的“创建”方法。

基本上我想要实现的是,首先创建并存储 group_id、owner_id、user_id、消息和状态的事务。然后,当用户“接受”请求时,将创建一个新的交易,其信息(group_id、owner_id 和 user_id)基本相同,只是状态和消息可以更改。

流程是这样的:用户首先创建这样的请求:

Request.create("gid" => 1, "user_id" => 2, "owner_id" => 4, "message" => "Bla Bla", "status" => 'pending')

然后该请求的所有者查看该请求,并能够接受或拒绝交易。请记住,所有请求都在同一页面中,因此同一页面上会有很多接受和拒绝,但每个请求都通过 @request = Requests.where(:owner_id => 4) 进行迭代。

隐藏输入的问题在于您可以轻松篡改它以更改您不应该更改的列。我想弄清楚的是,是否有一种方法可以将值传递给 accept 方法,同时使用新的(消息)和旧的(group_id、user_id、owner_id)来创建一个新行?

新的交易基本上是这样的:

Request.accept("gid" => ori_trans, "user_id" => ori_trans, "owner_id" => ori_trans, "message" => "New Message", "appointment" => ori_trans, "status" => 'accepted')

def accept
@request = Request.new(request_params)
@request.status = 'accepted'
@request.expert_id = current_user.id
respond_to do |format|
if @request.save
format.html { redirect_to @request, notice: 'Request was successfully created.' }
format.json { render action: 'show', status: :created, location: @request }
else
format.html { render action: 'new' }
format.json { render json: @request.errors, status: :unprocessable_entity }
end
end
end

def request_params
params.require(:request).permit(:gid, :user_id, :message)
end

将 GID 和 user_id 列入白名单的问题是用户可以调整表单以允许更改此字段。理想情况下,我只想允许 :message 从参数中传出。

希望这能解释我正在尝试做的事情 - 如果您有任何建议,请告诉我。

最佳答案

我认为下面的代码应该可以满足您的需求:

def accept
original_request = Request.find(params[:request][:id])
if original_request.owner_id != current_user.id
#do something here, logout maybe?
return
end
@request = original_request.dup
@request.message = params[:request][:message]
@request.status = 'accepted'

respond_to do |format|
if @request.save
format.html { redirect_to @request, notice: 'Request was successfully created.' }
format.json { render action: 'show', status: :created, location: @request }
else
format.html { render action: 'new' }
format.json { render json: @request.errors, status: :unprocessable_entity }
end
end
end

使用此代码,即使有人篡改了请求 ID 参数,如果他们尝试接受不属于他们的请求,那么它也会失败。

关于ruby-on-rails - Rails 4 将现有/以前的记录值传递给新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22220549/

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