gpt4 book ai didi

ruby-on-rails - 在创建操作中在 Rails Controller 中创建或新建

转载 作者:行者123 更新时间:2023-12-04 06:26:03 25 4
gpt4 key购买 nike

在 Rails 中,我们以两种方式定义 create Action 。有什么区别?

def create
@shop = Shop.new(params[:shop])
if @shop.save
flash[:success] = 'Thanks for adding new shop.'
redirect_to @shop
else
flash[:error] = 'Error adding review, please try again.'
redirect_to @shop
end
end

# or

def create
@shop = Shop.create(params[:shop])
if @shop.save
flash[:success] = 'Thanks for adding new shop.'
redirect_to @shop
else
flash[:error] = 'Error adding review, please try again.'
redirect_to @shop
end
end

考虑到我们已经有了:

def new
@shop = Shop.new
end

哪个更合适?

最佳答案

def new 操作仅适用于 New View (您的 Shop Controller 中的 new 操作将对应于 app/views/shop/new.html.erb 文件) - 它不做任何创建:

def new
@shop = Shop.new
end

在该操作中没有提到 params[:shop],因为参数还不存在 - 这就是您在 New View 中收集的内容.

您的 def create 操作是实际创建数据库条目的操作:

def create
@shop = Shop.new(params[:shop])
if @shop.save
flash[:success] = 'Thanks for adding new shop.'
redirect_to @shop
else
flash[:error] = 'Error adding review, please try again.'
redirect_to @shop
end
end

您正在使用 .new 而不是 .create 以便您可以进行验证。此外,Shop.new 调用实际上并没有创建记录 - 它是 @shop.save 这样做的。

关于ruby-on-rails - 在创建操作中在 Rails Controller 中创建或新建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14565122/

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