Rails 表单选择不会预选现有条目

问题描述 投票:0回答:1

情况

我正在编写一个简单的 Rails(又名无 JS)表单来创建/编辑对象

in_invoice
。一种关联称为
eur_object
,可以通过通过
form.select
选项生成的下拉菜单进行维护:

<%= f.select :eur_object_id, options_for_eur_expenses, include_blank: true %>

如您所见,调用

options_for_eur_expenses
来生成选项:

  def options_for_eur_expenses
    options_from_collection_for_select(EurObject.expenses.sort_by(&:name), 'id', 'dropdown_name')
  end

保存和编辑对象通常工作正常。

问题

有一个例外:如果您尝试编辑对象,则

eur_object
的值不会根据创建时选择的值进行预选择,尽管该值位于数据库中。下拉菜单显示一个空条目。

解决方案选项:“阅读 f******* 文档!”

Rails 文档/google/apidock 告诉我,将根据

id
选择旧条目,因此在本例中对象是
eur_object_id
。但这种情况并非如此。下拉菜单为空。

因此,基本上编辑并直接保存对象而不观察到更改将导致此关联被设置为

nil
。因此,编辑并直接保存会删除关联,这是非常意外的行为。

我通过 byebug 检查该属性实际上已维护。

解决方案

我正在寻找基于现有值预填充下拉列表的正确方法?可能是选择表单的选项需要通过“选定”选项等来丰富。我认为后者会在 Rails 中自动完成,但我在这里可能是错的!

ruby-on-rails forms select drop-down-menu helper
1个回答
0
投票

我终于在另一个堆栈溢出线程中找到了解决方案!

添加一个属性(添加了

id.to_s
东西),以便方法的调用者明确指出应该预先选择哪个
id
...因此名称实际上应该类似于
preselected_object_id
或其他东西,但无论如何)到调用:

def options_for_eur_expenses(id=nil)
   options_from_collection_for_select(EurObject.expenses.sort_by(&:name), 'id', 'dropdown_name', id.to_s)
  end

这解决了我刚刚发布的问题! :-)

© www.soinside.com 2019 - 2024. All rights reserved.