RoR - неопределенный метод `draft? 'для ноля: NilClass - PullRequest
0 голосов
/ 10 октября 2018

На самом деле я пытаюсь использовать атрибут enum в приложении блога rails 5. Проблема в том, что при попытке переключить статус с черновика на опубликованный или наоборот я получаю сообщение об ошибке «NoMethodError в BlogsController # toggle_status»

blogs_controller.rb

class BlogsController < InheritedResources::Base

  def toggle_status
    if @blog.draft?
       @blog.published!
    elsif @blog.published?
       @blog.draft!
    end

    redirect_to blogs_url, notice: "Blog status has been updated"
  end

  private

    def blog_params
      params.require(:blog).permit(:title, :body)
    end
end

index.html.slim

h1 Listing blogs

table
  thead
    tr
      th Title
      th Body
      th
      th
      th
      th

  tbody
    - @blogs.each do |blog|
      tr
        td = blog.title
        td = blog.body
        td = link_to blog.status,toggle_status_blog_path(blog)
        td = link_to 'Show', blog
        td = link_to 'Edit', edit_blog_path(blog)
        td = link_to 'Destroy', blog, data: { confirm: 'Are you sure?' }, method: :delete

br

= link_to 'New Blog', new_blog_path

blog.rb

class Blog < ApplicationRecord
  enum status: { draft: 0, published: 1 }
end

rout.rb

Rails.application.routes.draw do

  resources :blogs do 
    member do
      get :toggle_status
    end
  end
end

schema.rb

create_table "blogs", force: :cascade do |t|
    t.string "title"
    t.text "body"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "status", default: 0
  end

Я не знаю, где я могу пойти не так, я старался изо всех сил, но не могу понять.

Любые предложенияДобро пожаловать.

Заранее спасибо.

1 Ответ

0 голосов
/ 10 октября 2018

Вам нужно установить переменную @blog.

def toggle_status
  @blog = Blog.find(params[:id])
  ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...