NoMethodError в Welcome # show - PullRequest
       41

NoMethodError в Welcome # show

0 голосов
/ 19 сентября 2018

Вот ошибка, которую я получаю:

error

Фон:

Я пытаюсь отобразить кнопку в зависимости от того, завершено действие или нет,Вот мой код

<% if @courses_user.complete! %>
  <%= link_to "Completed", course, class: "block text-lg w-full text-center text-white px-4 py-2 bg-green hover:bg-green-dark border-2 border-green-dark leading-none no-underline" %>
<% else %>
  <%= link_to "View Modules", course, class: "block text-lg w-full text-center text-grey-dark hover:text-darker px-4 py-2 border-2 border-grey leading-none no-underline hover:border-2 hover:border-grey-dark" %>
<% end %>

В моей модели courses_user у меня есть

class CoursesUser < ApplicationRecord
  belongs_to :course
  belongs_to :user

  has_many :course_modules_users

  def completed!
    self.update_attributes(complete: true)
  end
end

, а в welcomeController у меня есть

class WelcomeController < ApplicationController
  def show
    @courses = Course.all.order(created_at: :asc)
    @courses_user = CoursesUser.all
  end
end

Но я получаюNoMethodError, любая помощь приветствуется.

1 Ответ

0 голосов
/ 19 сентября 2018

Вы определили @courses_user = CoursesUser.all, поэтому коллекция не является ни одним объектом.И вы не можете вызывать complete! для коллекции, как и ошибка.

Решение:

Выполните итерацию по @courses_user ивызывайте complete! для каждого экземпляра следующим образом:

<% @courses_user.each do |cu| %>
  <% if cu.complete! %>
    <%= link_to "Completed", course, class: "block text-lg w-full text-center text-white px-4 py-2 bg-green hover:bg-green-dark border-2 border-green-dark leading-none no-underline" %>
  <% else %>
    <%= link_to "View Modules", course, class: "block text-lg w-full text-center text-grey-dark hover:text-darker px-4 py-2 border-2 border-grey leading-none no-underline hover:border-2 hover:border-grey-dark" %>
  <% end %>
<% end %>

Примечание:

Чтобы избежать другой потенциальной ошибки, вы должны изменить complete! на completed!Это не метод, как complete! в вашей CoursesUser модели.

Таким образом, окончательный код будет

<% @courses_user.each do |cu| %>
  <% if cu.completed! %>
    <%= link_to "Completed", course, class: "block text-lg w-full text-center text-white px-4 py-2 bg-green hover:bg-green-dark border-2 border-green-dark leading-none no-underline" %>
  <% else %>
    <%= link_to "View Modules", course, class: "block text-lg w-full text-center text-grey-dark hover:text-darker px-4 py-2 border-2 border-grey leading-none no-underline hover:border-2 hover:border-grey-dark" %>
  <% end %>
<% end %>
...