gpt4 book ai didi

ruby-on-rails - 如何将参数从我的新方法传递到 Rails 中的创建方法?

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

如果特定参数已传递给新方法,我需要在我的创建方法结束时调用一个方法。我试图在不向我正在创建的对象添加新字段的情况下执行此操作,仅仅是为了成为一个临时的“参数桶”。该参数不会在创建新对象时使用,而是在保存对象后调用的二次方法中使用。

所以在代码中类似...

def new
@object = Object.new
if params[:object_id]
@object_trade = Object.find(params[:object_id])
end
end

def create
blah create blah
if @object.save && @object_trade.present?
call_method_here(@object_trade.id)
end
end

虽然我不能完全把各个部分放在一起。我觉得我错过了一些明显的东西。

对于它的值(value),我可以为我需要做的事情传递对象或只是一个参数。

感谢任何帮助。

最佳答案

Kirti Thorat rightly points out为什么实例变量不起作用,但建议使用 session ,这可能有问题。

如果用户使用 object_id 导航到"new"页面,但从未提交表单怎么办?相反,他们点击后退按钮并再次请求“新建”,这次没有 object_id,因为他们改变了主意。但是,object_trace 仍在 session 中,应用程序错误地记住了原始 object_id

我相信 flash 也会遇到类似的问题。

避免 session 很容易

以"new"操作呈现的形式呈现隐藏字段:

= hidden_field_tag 'object_id', params[:object_id]

然后,当您提交表单时,object_id 将被传递,并将作为 params[:object_id] 用于创建操作。

避免参加 session 的其他原因

  • 更易于理解和调试:随着您的应用程序变得越来越复杂,您会发现,如果请求中发生的错误每次在您运行时发生,它就会简单得多具有相同参数的相同请求。尝试修复无法可靠地重现的错误毫无乐趣可言。
  • 无状态方法与有状态方法一样易于实现
  • 避免您的应用配置为使用的任何类型的 session 存储的限制:
    • 如果使用 cookie 存储,您最终会希望存储太大而无法放入 cookie 的内容。
    • 如果使用数据库存储,您可能有一天会遇到值在 session 中无限期徘徊的问题。
    • 如果使用 memcache 存储,您将无法将您的应用扩展到多个 memcached 实例,而且您的应用将在您需要重新启动 memcached(或其所在的服务器)时随时中断。

关于ruby-on-rails - 如何将参数从我的新方法传递到 Rails 中的创建方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22844791/

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