Search code examples
ruby-on-railsruby-on-rails-4acts-as-commentable

Acts_as_commentable: AssociationTypeMismatch


I'm using "acts_as_commentable" gem, but If i try to create a new comment to a "status" I get this error.

enter image description here

Controller

enter image description here

Update:

If I use this, I don't get any errors but it doesn't save the comment into database

private
    def status_params
      params.require(:status).permit(:user, :message, :comments)
    end

View

enter image description here

<% if user_signed_in? %>
<%=form_for([resource.user, resource]) do |f| %>
    <%=f.fields_for :comments do |fc| %>

        <div class="row">
            <div class="large-1 columns">
                <%=image_tag current_user.photo %>
            </div>

            <div class="large-11 columns text-left">

                <%=fc.text_area :comment, placeholder: "Write a comment..."%>
                <div class="text-right">
                    <%=fc.submit "Send",  :class=>"pure-button pure-button-xsmall pure-button-primary" %>
                </div>

            </div>
        </div>
    <% end %>
<% end %>

Model (Status)

class Status < ActiveRecord::Base

  belongs_to :user

  acts_as_commentable
  acts_as_likeable

      validates :message, :presence => true
  end 

Model (User) class User < ActiveRecord::Base

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :confirmable, :omniauthable    

  has_many :statuses
  has_many :photos
  has_many :videos
  has_one :player_profile

  mount_uploader :photo, ProfilePhotoUploader

  accepts_nested_attributes_for :player_profile


  acts_as_liker

end

Gemfile

  source 'https://rubygems.org'
ruby '2.0.0'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.0'
gem 'pg'


gem 'sass-rails', git: 'https://github.com/rails/sass-rails.git'

# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'

# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', git: 'git://github.com/rails/coffee-rails.git'

# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby

# Use jquery as the JavaScript library
gem 'jquery-rails', '~> 3.0.0'

# assets

gem "asset_sync"

gem 'zurb-foundation', :git => "https://github.com/zurb/foundation.git"
gem "compass"
gem 'compass-rails', '2.0.alpha.0'
gem 'bourbon'
gem "font-awesome-rails"


gem 'kaminari'

gem 'jquery-turbolinks', github: "kossnocorp/jquery.turbolinks"
gem 'turbolinks', github: "rails/turbolinks"

# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 1.0.1'

group :doc do
  # bundle exec rake doc:rails generates the API under doc/api.
  gem 'sdoc', require: false
end

#gem 'protected_attributes'
gem 'devise' #, "~> 3.0.0.rc",     github: 'plataformatec/devise' #, branch: 'rails4'
gem 'responders',          github: 'plataformatec/responders'
gem 'inherited_resources', github: 'josevalim/inherited_resources'
gem 'ransack'
gem 'activeadmin',         github: 'gregbell/active_admin', branch: 'rails4'
gem 'formtastic',          github: 'justinfrench/formtastic'

gem "nested_form"
gem "simple_form"
gem "mini_magick"


gem 'omniauth'
gem 'omniauth-facebook'

gem 'carrierwave'
gem "fog", "~> 1.3.1"

gem 'public_activity'
gem 'acts_as_commentable'
gem "socialization"

gem 'rails_12factor'

Solution

  • SOLVED

    Solved using a CommentController instead of using comments as a nested model

    CommentController

    class CommentsController < ApplicationController
    
    
        def create
          comment = Comment.new comment_params
          commentable = params[:comment][:commentable_type].constantize.find(params[:comment][:commentable_id])
          comment.commentable = commentable
          comment.user = current_user
    
          comment.save
    
    
          redirect_to [commentable.user, commentable]
    
        end
    
    
        private
    
        def comment_params
            params.require(:comment).permit!
        end
    end
    

    Views

     <%= form_for(Comment.new) do |f| %>
    
    <div class="row">
        <div class="large-1 columns">
            <%=image_tag current_user.photo %>
        </div>
    
        <div class="large-11 columns text-left">
    
                <%=f.text_area :comment, placeholder: "Write a comment..."%>
                <%=f.hidden_field :commentable_type, :value => resource.class.to_s%>
                <%=f.hidden_field :commentable_id, :value => resource.id%>
    
            <div class="text-right">
    
                <%=f.submit "Send",  :class=>"pure-button pure-button-xsmall pure-button-primary" %>
            </div>
    
        </div>
    </div>
    
    <% end %>