ruby-on-rails - Ruby on Rails 为下拉值创建方法“未初始化的常量”错误
问题描述
我有一个表单可以正确呈现并在我的服务器日志中产生正确的值,但是当我去创建实际对象时它遇到了错误。
该模型被调用LeadMagnet
,这是架构:
create_table "lead_magnets", force: :cascade do |t|
t.string "title"
t.text "description"
t.boolean "motivation", default: false
t.boolean "mindset", default: false
t.boolean "resourcing", default: false
t.boolean "planning", default: false
t.boolean "time_management", default: false
t.boolean "discipline", default: false
t.string "type"
t.string "link_url"
t.boolean "active", default: true
t.bigint "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["user_id"], name: "index_lead_magnets_on_user_id"
end
lead_magnet#create
在这一行的我的方法上调用了错误:
@lead_magnet = LeadMagnet.new(lead_magnet_params)
这是它所指的参数:
def lead_magnet_params
params.require(:lead_magnet).permit(
:title,
:description,
:motivation,
:mindset,
:resourcing,
:planning,
:time_management,
:discipline,
:type,
:link_url,
:active,
:user_id
)
end
问题在于“type”的值,它是由以下代码生成的字符串:
<div class="form-group col-12 mb-0 pb-0">
<%= f.input :type, label: false, prompt: "Select LM Type", input_html: { class: 'mdb-select md-form colorful-select' }, collection: [['Attachment', 'Attachment'], ['Link', 'Link']], required: true %>
</div>
这反过来在服务器日志中创建:
Started POST "/lead_magnets" for ::1 at 2019-10-05 21:11:07 -0700
Processing by LeadMagnetsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"3NYnrPxC6oucYnV25TFOnAmbLjDoRLRisLkbNaisDBV6yCLkg1yXPC6bUo2hzEkrML1VdH+4BY4iLbqgGs0nIg==", "lead_magnet"=>{"title"=>"", "description"=>"", "motivation"=>"0", "mindset"=>"0", "resourcing"=>"0", "planning"=>"0", "time_management"=>"0", "discipline"=>"0", "type"=>"Link", "link_url"=>"", "active"=>"1"}, "commit"=>"Save"}
Completed 500 Internal Server Error in 3ms (ActiveRecord: 0.0ms)
NameError - uninitialized constant Link:
app/controllers/lead_magnets_controller.rb:27:in `create'
为什么值“Link”在它应该只是一个字符串值时作为一个未初始化的常量出现?
解决方案
事实证明,“type”在 Rails 中是一个受保护的名称。我将列名更改为lead_magnet_type
,错误消失了。
推荐阅读
- mysql - 从 3 个表创建视图时出错
- json - ReactJs 中的 Object.assign({}, obj) 替换 json 的对象
- windows - 如何先运行一个exe,然后等待5秒钟,然后在批处理文件中运行另一个exe
- c++ - 如何启用从 QSctpSocket 制作对象?
- sql-server - 如何将 .bak 文件导入 SQL Server?
- c++ - 当我要删除动态数组时,我得到错误双重释放或损坏
- c++ - 使用递归函数加密用户输入
- javascript - 如何有条件地启用 ng2-smart-table 的可编辑属性
- c++ - 如何使用三重指针传递 3D 数组?
- generics - Kotlin 中的简单泛型函数失败