首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NoMethodError on控制器方法Rails 5

NoMethodError on控制器方法Rails 5
EN

Stack Overflow用户
提问于 2018-09-19 14:35:15
回答 1查看 180关注 0票数 2

编辑#2

以下是服务器日志,当我单击勾选时

代码语言:javascript
复制
Started PUT "/course_modules/module-1-understanding-email-marketing-basics/complete" for 127.0.0.1 at 2018-09-19 16:29:42 +0100
Processing by CourseModulesUsersController#complete as HTML
  Parameters: {"authenticity_token"=>"CfIM56PhiIRumytV99CE7GFK6tYumCgDvBwUS79jhbCr3zpXLfbJgvqUFkzwmKLXQiOxk1SmFvGoO4+M1z87wg==", "id"=>"module-1-understanding-email-marketing-basics"}
  CourseModulesUser Load (0.7ms)  SELECT  "course_modules_users".* FROM "course_modules_users" WHERE "course_modules_users"."id" = $1 LIMIT $2  [["id", 0], ["LIMIT", 1]]
  ↳ app/controllers/course_modules_users_controller.rb:3
Completed 500 Internal Server Error in 6ms (ActiveRecord: 0.7ms)



NoMethodError (undefined method `complete=' for nil:NilClass):

app/controllers/course_modules_users_controller.rb:4:in `complete'

编辑#1

这就是我现在的处境。

我可以使用rails控制台访问记录。

代码语言:javascript
复制
irb(main):017:0> @course_modules_users = CourseModulesUser.find_by(id: 1)
  CourseModulesUser Load (0.4ms)  SELECT  "course_modules_users".* FROM "course_modules_users" WHERE "course_modules_users"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
=> #<CourseModulesUser id: 1, course_module_id: 1, courses_user_id: 1, complete: false, created_at: "2018-09-19 13:04:16", updated_at: "2018-09-19 14:58:17">
irb(main):018:0> @course_modules_users.complete = true
=> true

如果我尝试根据布尔值进行检查,如下所示

代码语言:javascript
复制
<% if @course_modules_users.where(complete: true).nil? %>
  <i class="fas fa-check text-green float-left mr-1"></i>
  <span class="text-xs mr-2">Completed</span>
<% else %>
  <%= link_to complete_course_module_path(course_module), method: :put do %>
  <i class="fas fa-check text-grey-darkest float-left mr-2"></i>
  <% end %>
<% end %>

这个节目是

但是如果我手动更改记录

前端没有任何变化。

原始

以下是我的错误:

因此,我现在有一个路由设置,一旦单击,就会触发下面的complete方法,并将记录更改为true。但是,正如您所看到的,它无法找到完整的方法。

这是数据库

我已经在终端上测试过这个,它可以找到完整的字段。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-19 14:42:41

错误说@course_modules_usernil,注意到complete方法出错了。所以你定义了

代码语言:javascript
复制
@course_modules_user = CourseModulesUser.find_by(id: params[:id]) 

检查params并确保在course_modules_users表中有一个带有params[:id]值的记录,这样@course_modules_user就不是零。

更新:

在使用friendly_id时,id的值作为slug发送。所以告诉Rails不要像这样更改link_to

代码语言:javascript
复制
<%= link_to complete_course_module_path(course_module.id), method: :put do %>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52408362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档