You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails中如何在ERB的text_field显示关联Quiz的所有Question ID?

解决Rails中在text_field显示关联模型ID的问题

嘿,我来帮你搞定这个问题~ 你现在的问题是直接把关联对象传给text_field,它只会显示对象的字符串表示,而不是你想要的Question ID集合。这里有几种简单的实现方式:

方法1:在视图中直接处理(快速实现)

如果只是单纯想显示ID,不需要后续处理提交的内容,直接在视图里提取ID并格式化就行:

假设你是用form_for来构建表单的,代码可以写成这样:

<%= form_for @quiz do |f| %>
  <%= f.text_field :question_ids, value: @quiz.questions.pluck(:id).join(', ') %>
<% end %>

要是不用form_for,用text_field_tag的话:

<%= text_field_tag 'quiz[question_ids]', @quiz.questions.pluck(:id).join(', ') %>

这里的pluck(:id)会直接从关联的Question中取出所有ID组成数组,join(', ')再把数组转成逗号分隔的字符串,这样输入框里就会显示类似1, 2, 3的ID列表啦。

方法2:用模型虚拟属性(更优雅,支持提交更新)

如果还需要在提交表单时更新Quiz关联的Question,推荐在Quiz模型里加个虚拟属性,这样代码复用性更好:

先在app/models/quiz.rb里添加:

# 用于显示ID字符串
def question_ids_string
  questions.pluck(:id).join(', ')
end

# 处理提交的ID字符串,更新关联
def question_ids_string=(ids_str)
  # 把逗号分隔的字符串转成整数数组,过滤掉空值
  self.question_ids = ids_str.split(',').map(&:strip).reject(&:empty?).map(&:to_i)
end

然后在视图里就可以直接用这个虚拟属性:

<%= form_for @quiz do |f| %>
  <%= f.text_field :question_ids_string %>
<% end %>

这样不仅显示的时候更简洁,提交表单时还能自动把输入的ID字符串转成关联的Question ID数组,直接更新Quiz的关联关系~

为什么你的原写法不行?

你原来的<%= text_field(:quiz, :quiz_questions) %>会调用关联集合quiz_questions的to_s方法,所以显示的是类似#<ActiveRecord::Associations::CollectionProxy[...]>的对象字符串,而不是我们需要的ID列表。必须主动提取ID并格式化才行哦。

内容的提问来源于stack exchange,提问作者Lax_Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:19:15