Note that there are some explanatory texts on larger screens.

plurals
  1. POFirst argument in form cannot contain nil or be empty (acts_as_commentable error)
    primarykey
    data
    text
    <p>So I'm trying to get the acts_as_commentable_with_threading gem working in my app. I would like to allow the users to comment on specific events (events/show.html). I don't think I've set it up properly as I'm getting the below error.</p> <p><strong>error:</strong></p> <p>Showing /Users/user/Sites/new_work/app/views/events/show.html.erb where line #36 raised:</p> <pre><code>First argument in form cannot contain nil or be empty &lt;/div&gt; &lt;div class="name"&gt;&lt;/div&gt; &lt;div id="comments"&gt; &lt;%= form_for @comment do |f| %&gt; &lt;---- it's referring to this line &lt;div&gt;&lt;%= f.hidden_field :event_id, value: @event.id %&gt;&lt;/div&gt; &lt;div&gt;&lt;%= f.text_field :body, row: 20, placeholder: "Leave a comment" %&gt;&lt;/div&gt; &lt;%= f.submit "Post Comment" %&gt; </code></pre> <p><strong>comments_controller.rb</strong></p> <pre><code>class CommentsController &lt; ApplicationController before_filter :load_commentable def index @comments = @commentable.current_user.comments end def new @comment = @commentable.current_user.comments.new end def create @comment = @commentable.current_user.comments.new(params[:comment]) if @comment.save redirect_to @commentable, notice: "Comment created." else render :new end end private def load_commentable resource, id = request.path.split('/')[1, 2] @commentable = resource.singularize.classify.constantize.find(id) end end </code></pre> <p><strong>comment.rb snippit only</strong></p> <pre><code>class Comment &lt; ActiveRecord::Base attr_accessible :title, :body, :subject acts_as_nested_set :scope =&gt; [:commentable_id, :commentable_type] validates :body, :presence =&gt; true validates :user, :presence =&gt; true # NOTE: install the acts_as_votable plugin if you # want user to vote on the quality of comments. #acts_as_votable belongs_to :commentable, :polymorphic =&gt; true # NOTE: Comments belong to a user belongs_to :user </code></pre> <p><strong>event.rb</strong></p> <pre><code>class Event &lt; ActiveRecord::Base attr_accessible :title, :description, :location, :date, :time, :event_date acts_as_commentable has_many :comments, as: :commentable belongs_to :user after_create :update_event_date def update_event_date date = self.date.to_s time = self.time hour = Time.parse(time).strftime("%H:%M:%S").to_s event_date = (date + ' ' + hour).to_time self.update_attributes(event_date: event_date) end end </code></pre> <p><strong>comments/form.html.erb</strong></p> <pre><code>&lt;%= form_for [@commentable, @comment] do |f| %&gt; &lt;% if @comment.errors.any? %&gt; &lt;div class="error_messages"&gt; &lt;h3&gt;Please correct the following errors.&lt;/h3&gt; &lt;ul&gt; &lt;% @comment.errors.full_messages.each do |msg| %&gt; &lt;li&gt;&lt;%= msg %&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;% end %&gt; &lt;div class="field"&gt; &lt;%= f.text_field :body, rows: 10, placeholder: "Leave a comment" %&gt; &lt;/div&gt; &lt;div class="actions"&gt; &lt;%= f.submit "Post comment", class: "btn" %&gt; &lt;/div&gt; &lt;% end %&gt; </code></pre> <p><strong>events_controller.rb</strong></p> <pre><code>class EventsController &lt; ApplicationController before_filter :authenticate_user! def index @user = current_user @events = Event.all end def new @event = Event.new end # def create # @event = Event.new(params[:event]) # if @event.save # redirect_to :action =&gt; 'index' # else # @events = Event.find(:all) # render :action =&gt; 'new' # end # end def create @event = current_user.events.new(event_params) respond_to do |format| if @event.save format.html { redirect_to :back, notice: 'Event was successfully created.' } format.json { render action: 'show', status: :created, location: @event } format.js else format.html { render action: 'new' } format.json { render json: @event.errors, status: :unprocessable_entity } format.js end end end def show @event = Event.find(params[:id]) end def edit @event = Event.find(params[:id]) end def update @event = Event.find(params[:id]) if @event.update_attributes(params[:event]) flash[:success] = "Event updated." redirect_to @event else render 'edit' end end def destroy @event = Event.find(params[:id]) @event.destroy respond_to do |format| format.html {redirect_to :back} format.js end end private # Use callbacks to share common setup or constraints between actions. def set_event @event = Event.find(params[:id]) end </code></pre> <p><strong>routes.rb</strong></p> <pre><code>New_app::Application.routes.draw do # get 'auth/:provider/callback', to: 'sessions#create' # get 'auth/failure', to: redirect('/') root to: "home#landing" devise_for :users, :controllers =&gt; {:registrations =&gt; "users/registrations", :sessions =&gt; "users/sessions", :passwords =&gt; "users/passwords", :omniauth_callbacks =&gt; "users/omniauth_callbacks" } get "welcome", to: "home#welcome", as: 'welcome' devise_scope :user do # get "edit/edit_account", :to =&gt; "devise/registrations#edit_account", :as =&gt; "account_registration" get 'edit/edit_account' =&gt; 'users/registrations#account_registration', as: :edit_account end # patch '/users/:id', to: 'users#update', as: 'user' get 'profile/:id' =&gt; "users#show", as: :profile get 'disconnect' =&gt; 'users#disconnect' resources :users do resources :questions end resources :photos resources :events do resources :comments end post "/events/add_new_comment" =&gt; "events#add_new_comment", :as =&gt; "add_new_comment_to_events", :via =&gt; [:event] resources :questions end </code></pre> <p><strong>rake routes for comments</strong></p> <pre><code>event_comments GET /events/:event_id/comments(.:format) comments#index POST /events/:event_id/comments(.:format) comments#create new_event_comment GET /events/:event_id/comments/new(.:format) comments#new edit_event_comment GET /events/:event_id/comments/:id/edit(.:format) comments#edit event_comment GET /events/:event_id/comments/:id(.:format) comments#show PATCH /events/:event_id/comments/:id(.:format) comments#update PUT /events/:event_id/comments/:id(.:format) comments#update DELETE /events/:event_id/comments/:id(.:format) comments#destroy </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload