असल में मैं अपने रेल 5 ब्लॉग ऐप में एनम विशेषता का उपयोग करने की कोशिश कर रहा हूं। समस्या यह है कि जब मैं ड्राफ्ट से प्रकाशित या इसके विपरीत स्थिति को टॉगल करने का प्रयास करता हूं, तो मुझे "NoMethodError in 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

ब्लॉग.आरबी

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

मार्ग.आरबी

Rails.application.routes.draw do

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

स्कीमा.आरबी

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
Muhammad Yaseen 10 अक्टूबर 2018, 20:53

1 उत्तर

सबसे बढ़िया उत्तर

आपको अपना @blog इंस्टेंस वैरिएबल सेट करना होगा।

def toggle_status
  @blog = Blog.find(params[:id])
  ...
1
SteveTurczyn 10 अक्टूबर 2018, 21:01