rails ruby-on-rails ruby-on-rails-4 commenting

ruby-on-rails - scaffold ruby on rails



Error de "variable o método local indefinido" al usar gema commontator para comentarios (2)

Como no hay stacktrace agregado, un par de observaciones.

  1. acts_as_commontator y acts_as_commontable se agregan en el mismo modelo.

    Según la documentación en https://github.com/lml/commontator

    • acts_as_commontator // para ser agregado en modelo (s) de usuario (o cualquier modelo que debería poder publicar comentarios)
    • acts_as_commontable // para agregar en los modelos que quieras poder comentar

      Entonces, ¿puedes intentar mover acts_as_commontator al modelo de usuario?

  2. En la línea pin.rb no. 3, .remove la línea acts_as_commentable que no es utilizada por tu gem commontator

Hice un sitio web en el que las personas pueden compartir fotos (se llaman pines en mi código). Quería agregar un sistema en el que, cuando alguien hace clic en la imagen, puedan comentarlo. Decidí usar la gema de Commontator y lo instalé. Mi problema es que el sistema de comentarios no aparece debajo de las publicaciones como se supone y obtengo una variable local indefinida o un error de método para mi controlador de pins.

routes.rb

Photo::Application.routes.draw do resources :pins devise_for :users root "pins#index" get "about" => "pages#about" mount Commontator::Engine => ''/commontator''

show.html.erb

<%= link_to ''Back'', pins_path %> <div class="row"> <div class="col-md-offset-2 col-md-8"> <div class="panel panel-default"> <div class="panel-heading center"> <%= image_tag @pin.image.url(:medium) %> </div> <div class="panel-body"> <p><%= @pin.description %></p> <p><strong><%= @pin.user.name if @pin.user %></strong></p> <%= commontator_thread(commontable) %> <% if @pin.user == current_user %> <%= link_to edit_pin_path(@pin) do %> <span class="glyphicon glyphicon-edit"></span> <% end %> <% end %> </div> </div> </div>

pin.rb

class Pin < ActiveRecord::Base belongs_to :user acts_as_commentable has_attached_file :image, :styles => { :medium => "300x300>", :thumb => "100x100>" } validates :image, presence: true acts_as_commontator acts_as_commontable end

pins_controller.rb

class PinsController < ApplicationController before_action :set_pin, only: [:show, :edit, :update, :destroy] before_action :correct_user, only: [:edit, :update, :destroy] before_action :authenticate_user!, except: [:index, :show] def index @pins = Pin.all.order("created_at DESC").paginate(:page => params[:page], :per_page => 8) end def show end def new @pin = current_user.pins.build end def edit end def create @pin = current_user.pins.build(pin_params) if @pin.save redirect_to @pin, notice: ''Pin was successfully created.'' else render action: ''new'' end end def update if @pin.update(pin_params) redirect_to @pin, notice: ''Pin was successfully updated.'' else render action: ''edit'' end end def destroy @pin.destroy redirect_to pins_url end private # Use callbacks to share common setup or constraints between actions. def set_pin @pin = Pin.find(params[:id]) end def correct_user @pin = current_user.pins.find_by(id: params[:id]) redirect_to pins_path, notice: "Not authorized to edit this pin" if @pin.nil? end def pin_params params.require(:pin).permit(:description, :image) end end

Usuario modelo user.rb

class User < ActiveRecord::Base # Include default devise modules. Others available are: # :token_authenticatable, :confirmable, # :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable has_many :pins, dependent: :destroy validates :name, presence: true acts_as_commontator end

error Me estoy poniendo en show.html.erb

NameError in Pins#show undefined local variable or method `commontable'' for #<#<Class:0x007f9d8ccec328>:0x007f9d8df68768> Extracted source (around line #12): <div class="panel-body"> <p><%= @pin.description %></p> <p><strong><%= @pin.user.name if @pin.user %></strong></p> **<%= commontator_thread(commontable) %>** <% if @pin.user == current_user %> <%= link_to edit_pin_path(@pin) do %>


Suponiendo que ha agregado acts_as_commontable al modelo Pin ,

En los pins/show.html.erb ,

Reemplazar

<%= commontator_thread(commontable) %>

Con

<%= commontator_thread(@pin) %>

Según la Documentación de uso de Commontator ,

En <%= commontator_thread(commontable) %>

commontable es una instancia de un modelo que acts_as_commontable .

que en tu caso es @pin .