Working in install acts_as_commentable, On create, error: "unknown attribute: book_id"

Hello, I'm working to install the acts_as_commentable plugin on my Rails 3 app.

After adding "acts_as_commentable" to my book model, I then added a comment form on my book show view:

<% form_for(@comment) do|f| %>   <%= f.hidden_field :book_id %>   <%= f.label :comment %><br />   <%= f.text_area :comment %>   <%= f.submit "Post Comment" %> <% end %>

Then in the controller (comments_controller.rb),   def create     @comment = Comment.new(params[:comment])     Book.comments.create(:title => "First comment.", :comment => "This is the first comment.")   end

Then when submitting a comment, it returns the error: "unknown attribute: book_id"

From the log:   Processing by CommentsController#create as HTML   Parameters: {"comment"=>{"comment"=>"WOOOW", "book_id"=>"32"}, "commit"=>"Post Comment", "authenticity_token"=>"5YbtEMpoQL1e9coAIJBOm0WD55vB2XRZMJa4MMAR1YI=", "utf8"=>"✓"} Completed in 11ms

ActiveRecord::UnknownAttributeError (unknown attribute: book_id):   app/controllers/comments_controller.rb:3:in `new'   app/controllers/comments_controller.rb:3:in `create'

Suggestions?

i made an example app for kelp kelp , it has threaded comments and polymorphic associations, tested on rails 3, you can see it at

http://github.com/rbritom/Simple_polymorphic_nested_comments

watch the code and do it your self, i think is better than using that gem, since is really easy to achieve with out the gem.

I added lots of comments so that you can understand whats going and added some ajax, if you need more explanations just ask.

Thanks, that looks interesting and helpful... Couple comments:

What is lft rgt for in the database?

Also, proyects should be spelled projects....

Does nesting currently work is are you still working on implementing it?

I'd still be interested in knowing y I'm hitting the bug above, any ideas?

oh , awsome nested set gem arrenges item like a tree , to is like

                                         root
                                            >
                              ________|__________
                       left  |            item             | right
                  ______ |__           |      ______|______

you see item has a left and right sibling, the gem saves , the parent_id of item , in this case root and the item of the item to the left and to the right

oh , awesome nested set gem arranges item like a tree , to is like

                                         root
                                            >

                              ________|__________

                       left  |            item             | right
                  ______ |__           |      ______|______

you see item has a left and right sibling, the gem saves the parent_id of the item , in this case root and the id of the item to the left and to the right

Very interesting, new to me...

Does nesting currently work in your example app OR are you still working on implementing it? I'm trying to decide if nesting isn't yet done, if I should wait until it's up and working?

everything works it only lacks the comments

im going to update in 5 minutes , i added ajax pagination

In 15 minutes im going to add ajax to the destroy action and a loading gif

Nice can't wait to try it out... Why not turn this into a Rails 3 Gem / plugin?

ill think about it, i have never done one before.

check it out i cant think of any more features to add. See if you can think of something =D

Very nice thanks, I'm trying it out now.

don't really have the need for pagination but it's helpful as a learning tool/tutorial of sorts...

regarding a feature to add, I can actually think of one very common feature, as seen on Facebook. If you have over 3 comments, to only show the latest 2 comments, and then have a ajax link "View all X comments" which when clicked loads/injects the remaining comments into the comment list. That's a pretty important one! A less important one, is being able to LIKE a comment.

Sound interesting?

To get your code working in my app I needed to: @comments = @article.comments.roots.order("created_at DESC").paginate( :page => params[:page]||1,:per_page => 5) REMOVE roots in books_controller.rb: @comments = @article.comments.order("created_at DESC").paginate( :page => params[:page]||1,:per_page => 5)

And in comment.rb: COMMENT OUT #acts_as_nested_set

Otherwise I get the error on the books show page: "uninitialized constant Book::Comment"

Is there a GEM that needs to be installed? Or maybe this isn't supported for Rails 3?

It would also be create if

def create @comment = @commentable.comments.build(params[:comment])

Passed along the current_user as I added user_id to the comments table :slight_smile:

oohh very good ones , ill surely put them

well i left that out because it would make the example a little harder to follow what i will do is a second example that will integrate users, then one with users and captcha, i will add funcionality on topp of the existing one but as a new project so is easy to learn what’s news

the projet is done i rails three and the awesome nested set is in there as a plug in, is what does the nesting, if you dont use it the nesting wont work, can you give me more info on you book model? i want know why is not working

Is the plug-in in the GEM file? I'm not seeing it. Could you point it out so I can add it to my GEM file? If the plugin isn't via the GEM file, how do you get it added to the rails 3 app?

Thanks!

no , plugins go along with the rails app. gems get installed in the computer your are using and if you take your rails app somewhere else you have to install all the gems in that other computer, plugins install in the /vendor/plugin folder in the rails app and they go where ever you app goes, the result is almost the same but , gems are better if you have several project using something common, for example , most rails app use will_paginate so is better to install it as a gem on the pc, if you install will paginate as a plugin you would have a copy of will_paginate in each app, and also your app would grow as you put plugins in them.

At then i installed awesome nested set as a plugin in the vendors/plugin directory because i needed to hack it, is not a good idea to hack a gem as gems as i explained are shared by all the apps in that computer.