Acts_as_commentable:AssociationTypeMismatch

时间:2013-08-11 16:40:24

标签: ruby-on-rails ruby-on-rails-4 acts-as-commentable

我正在使用" acts_as_commentable"宝石,但如果我试图创建一个新的评论状态"我收到了这个错误。

enter image description here

控制器

enter image description here

更新

如果我使用此功能,我不会收到任何错误,但不会将评论保存到数据库中

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

查看

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 %>

型号(状态)

class Status < ActiveRecord::Base

  belongs_to :user

  acts_as_commentable
  acts_as_likeable

      validates :message, :presence => true
  end 

型号(用户)     class User&lt;的ActiveRecord ::基

  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'

1 个答案:

答案 0 :(得分:3)

<强>解决

使用CommentController解决,而不是将注释用作嵌套模型

<强> 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

<强>视图

 <%= 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 %>