gpt4 book ai didi

ruby-on-rails - 在 Ruby on Rails 中创建对象时,您更喜欢哪种保存方法,为什么?

转载 作者:数据小太阳 更新时间:2023-10-29 06:58:42 27 4
gpt4 key购买 nike

在为 Ruby on Rails 应用程序中的对象编写“创建”方法时,我使用了两种方法。为了更清晰和更一致的代码,我想使用一种方法。我将在下面列出两种方法。有谁知道一个比另一个好吗?如果是,为什么?

方法一:

def create1
# is this unsecure? should we grab user_id from the session
params[:venue]['user_id'] = params[:user_id]

begin
venue = Venue.create(params[:venue])
@user_venues = @user.venues
render :partial => 'venue_select_box', :success => true, :status => :ok
rescue ActiveRecord::RecordInvalid
render :text => 'Put errors in here', :success => false, :status => :unprocessable_entity
end
end

方法二:

def create2
# is this unsecure? should we grab user_id from the session
params[:venue]['user_id'] = params[:user_id]

venue = Venue.new(params[:venue])
if venue.save
@user_venues = @user.venues
render :partial => 'venue_select_box', :success => true, :status => :ok
else
render :text => 'Put errors in here', :success => false, :status => :unprocessable_entity
end
end

最佳答案

class VenuesController < ApplicationController
def create
@venue = @user.venues.create!(params[:venue])
render :partial => 'venue_select_box', :success => true, :status => :ok
end

rescue_from ActiveRecord::RecordInvalid do
render :text => 'Put errors in here', :success => false, :status => :unprocessable_entity
end
end

以这种方式使用@user.venues 可确保始终正确设置用户ID。此外,ActiveRecord 将保护 :user_id 字段在 #create! 调用过程中不被赋值。因此,来自外部的攻击将无法修改 :user_id

在您的测试中,您可以验证对 :create 执行 POST 会引发 ActiveRecord::RecordInvalid 异常。

关于ruby-on-rails - 在 Ruby on Rails 中创建对象时,您更喜欢哪种保存方法,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/726146/

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