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

在Rails的Kudos新建表单中创建预定义下拉框遇NoMethodError

问题解决方案

1. 修复模型关联(解决NoMethodError)

错误提示undefined method 'company_value' for #<Kudo>是因为Kudo模型未与CompanyValue建立关联,在app/models/kudo.rb中添加关联代码:

class Kudo < ApplicationRecord
  belongs_to :giver, class_name: 'Employee'
  belongs_to :receiver, class_name: 'Employee'
  belongs_to :company_value # 新增这一行
end

2. 实现仅显示指定选项的下拉框

针对你的需求,提供两种可靠方案:

方案一:基于数据库查询(推荐,保持数据一致性)

用collection_select但只查询你需要的四个公司价值观,避免加载全部数据:

<%= f.label :company_value %><br/>
<%= f.collection_select :company_value_id, 
                        CompanyValue.where(title: ['Honesty', 'Ownership', 'Passion', 'Accountability']), 
                        :id, 
                        :title,
                        prompt: "请选择公司价值观" %>
  • 该方法会从数据库中精准筛选出指定的4条记录,保证选项和数据库数据一致
  • 表单参数会自动嵌套在params[:kudo]中,符合Rails表单规范

方案二:固定选项(不依赖数据库记录)

如果你想直接用硬编码的选项,不要用select_tag,改用表单对象的select方法,确保参数提交到正确的命名空间:

<%= f.label :company_value %><br/>
<%= f.select :company_value_id, 
             [['Honesty', 1], ['Ownership',2],['Passion',3],['Accountability',4]],
             prompt: "请选择公司价值观" %>

⚠️ 注意:这里的ID(1/2/3/4)必须和company_values表中对应记录的ID完全一致,否则会导致关联失败。

3. 验证参数权限

你的控制器中kudo_params已经正确允许了company_value_id,无需修改:

def kudo_params
  params.require(:kudo).permit(:title, :content, :giver_id, :receiver_id, :company_value_id)
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:17:02