【问题标题】:.find & .built with new?.find & .built with new?
【发布时间】:2016-04-16 04:23:55
【问题描述】:

我使用此路径:new_inspiration_path(inspiration_id: inspiration.id) 从现有灵感中获取信息并预填充新表单,以便用户只需单击路径路径然后提交即可复制灵感。

但我的问题是,一旦提交表单,就不会创建新的灵感。

  def new
    if params[:inspiration_id]
      @inspiration = Inspiration.find(params[:inspiration_id])
    end
    @inspiration = current_user.inspirations.build
  end

  def create
    @inspiration = current_user.inspirations.build(inspiration_params)
    @inspiration.save
  end

这是因为@inspiration 被困在尝试做两种不同的事情:.find.built。当params[:inspiration_id] 时,我们如何才能做到这两点?

问题来自:How to prepopulate form with data passed from @object?

【问题讨论】:

    标签: ruby-on-rails ruby path controller submit


    【解决方案1】:

    如图所示,您的代码未使用@inspirational。您需要通过@inspirational.attributes.slice(Inspiration.attribute_names) Inspiration.new 将所有相关属性复制到新对象:

    if params[:inspiration_id]
      @inspirational = Inspiration.find(params[:inspiration_id])
      inspirational_attributes = @inspirational.attributes.slice(Inspiration.attribute_names)
    end
    
    @inspiration = current_user.inspirations.new(inspirational_attributes)
    

    当然,当params[:inspiration_id] 未设置时,请确保inspirational_attributes 设置为{}

    【讨论】:

    • 那是一个错字。我的意思是只说inspiration,但如果我使用inspirationinspirational 进行区分,也许它会起作用。我按原样插入了您的代码,并从inspirational 中删除了结尾al,但无论哪种方式,代码都不会填充_form。也许是因为我误解了你的“当然”段落。对不起,你能详细说明一下 Leito 吗?非常感谢您的帮助!
    • 你说表单没有填充,但是inspirational_attributes 有你想要的值吗?在担心表单之前,我们需要确保它有效。我只是说inspirational_attributes = {} 应该在if 之前,所以你不会得到“NameError: undefined local variable or method `inspirational_attributes'”
    • 是的,我只是将Inspiration.name 放在attribute_names 上,当我点击路径时,我会被带到新的_form,它仍然无人居住。没有错误出现。并感谢 Leito 的澄清 :)
    • 啊,你有@inspirational.attributes.slice 等。attributes 是否只是一个占位符,因为我没有在其他任何地方定义它?
    • @AnthonyGalli.com,属性来自您的模型继承的类:ActiveRecord::Base。我们不要把它变成聊天。搜索调试、提示:搜索byebug 或简单地学习如何使用puts var_name 进行故障排除(输出到rails 服务器输出),因此除了错误之外,您还可以在表单呈现之前查看变量的值。跨度>
    猜你喜欢
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 2022-12-31
    • 2022-12-04
    • 2011-06-08
    • 1970-01-01
    • 2022-12-01
    相关资源
    最近更新 更多