【问题标题】:Displaying name in input, but sending id to the back-end在输入中显示名称,但将 id 发送到后端
【发布时间】:2015-11-24 20:01:30
【问题描述】:

我正在尝试扩展简单表单,以便可以使用输入(不是选择,只是文本输入)来选择帐户的所有者。我想在编辑表单时在表单中显示帐户所有者的姓名,并在提交表单时将他们的 uuid 发送到后端。我已经获得了一个预先输入的菜单,可以按名称从数据库中显示用户,但我不知道一旦选择了其中一个用户,如何发送他们的 uuid。

到目前为止,我发现我需要做这样的事情

  = simple_for_for @account do |f|
    = f.error_notification

    = f.input :name
    = f.simple_fields_for @account.contact do |p|
      = p.input :name

    = f.button :submit

【问题讨论】:

  • 您可能想要一个带有options_for_select 的选择框。您可以将当前表单发布到您想要添加此功能的位置吗?
  • 什么样的库在处理预输入?您可能应该重新考虑使用选择框,您可以使用 jQuery.chosen 库或其他东西轻松模仿所需的行为......这样仍然可以回退到正常的选择。
  • 我正在使用 typeahead.js,我希望使用输入,因此如果用户尚未在数据库中,我也可以在表单中创建新用户。
  • 另外,有大量用户,所以我不想每次管理员想要做这样的事情时都抓住他们,理想情况下他们只抓住一个子集。使用文本框使整个过程对他们来说更加顺畅。

标签: ruby-on-rails forms simple-form typeahead.js


【解决方案1】:

simpleform 显示相关记录下拉列表的正确方法是这样的:

simple_form_for :main_model do |f|
  f.input :name
  f.association :relationship_name_to_related_model
  f.submit
end

这将使用related_model的名称字段自动填充选择框,并将ID作为值。

如果您的列不符合标准,您可以像这样否决默认值:

f.association :relationship_name_to_related_model, label_method: :name_of_label_column, value_method: :name_of_id_column

【讨论】:

  • 谢谢,我并没有尝试使用选择,只是一个文本输入,应该已经清楚了。我已经更新了我的问题。
  • 你使用什么样的 javascript 库?因为您可能应该看看那个,因为这听起来不再像 Rails 问题了!
  • 如果有人想知道,我采用的解决方案是编写一个自定义 SimpleForm 输入,该输入由一个剥离的显示输入(不发送到后端)和一个隐藏的 id 组成input 在显示输入发生变化时由 JS 更新,是发送到后端更新模型的部分。
猜你喜欢
  • 2020-02-18
  • 2014-05-19
  • 2016-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多