Ruby on Rails创建Instrument时报undefined method `title'错误求助
问题解决步骤
1. 修复undefined method 'title'错误
错误根源是代码里调用了title方法,但数据库实际字段是tiitle,把所有用到title的地方替换成tiitle即可:
控制器(instruments_controller.rb)
检查参数强过滤部分,确保允许的字段是tiitle:
def instrument_params params.require(:instrument).permit(:tiitle, # 替换成tiitle # 其他需要的字段...) end
如果控制器里有其他调用@instrument.title的地方,也一并改成@instrument.tiitle。
表单视图(_form.html.erb)
表单字段要和数据库字段对应:
<%= form.label :tiitle %> <%= form.text_field :tiitle %>
2. 关于id: nil的疑问
Rails会自动给所有数据库表添加id作为主键,不需要手动在迁移里定义。错误信息里的id: nil是因为当前Instrument对象还没成功保存到数据库(创建过程出错导致未持久化),所以id还没有被赋值,这是正常状态,不用额外处理。
可选优化(如果之后想修正拼写)
要是后续觉得tiitle拼写不方便,可以通过迁移重命名字段:
rails generate migration RenameTiitleToTitleInInstruments
打开生成的迁移文件,添加字段重命名逻辑:
class RenameTiitleToTitleInInstruments < ActiveRecord::Migration[7.0] def change rename_column :instruments, :tiitle, :title end end
执行rails db:migrate完成修改,之后代码就可以统一用title了。
内容的提问来源于stack exchange,提问作者uma
相关产品推荐
相关产品推荐

