I''m basing feeds/show.rhtml and feeds_controller.rb on
Chapter 12 - More Model Magic
Ruby on Rails For Dummies
by Barry Burd
John Wiley & Sons © 2007
specifically listings 12-12 and 12-14. Of course, it''s now deprecated
:(
There''s a has_many_through between the "feeds" and
"tags" tables. The
join table is "colors", for lack of a better name. I believe that the
name of the join table and that it''s a has_many_through are causing the
error message.
I have a screen shot at http://code.google.com/p/strawr/ , just click on
the add_a_tag.png. Up to that point, everything works. However, when I
click on the button I get the following error:
NoMethodError in FeedsController#add_some_tags
undefined method `push_with_attributes'' for Tag:Class
RAILS_ROOT: ./script/../config/..
Application Trace | Framework Trace | Full Trace
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/
base.rb:1238:in `method_missing''
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/
associations/has_many_through_association.rb:120:in `send''
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/
associations/has_many_through_association.rb:120:in `method_missing''
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/
base.rb:946:in `with_scope''
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/
associations/has_many_through_association.rb:120:in `method_missing''
/home/thufir/Desktop/strawr/app/controllers/feeds_controller.rb:88:in
`add_some_tags''
/home/thufir/Desktop/strawr/app/controllers/feeds_controller.rb:87:in
`each''
/home/thufir/Desktop/strawr/app/controllers/feeds_controller.rb:87:in
`add_some_tags''
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/
base.rb:1238:in `method_missing''
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/
associations/has_many_through_association.rb:120:in `send''
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/
associations/has_many_through_association.rb:120:in `method_missing''
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/
base.rb:946:in `with_scope''
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/
associations/has_many_through_association.rb:120:in `method_missing''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
base.rb:1101:in `send''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
base.rb:1101:in `perform_action_without_filters''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
filters.rb:696:in `call_filters''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
filters.rb:688:in `perform_action_without_benchmark''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
benchmarking.rb:66:in `perform_action_without_rescue''
/usr/lib/ruby/1.8/benchmark.rb:293:in `measure''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
benchmarking.rb:66:in `perform_action_without_rescue''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
rescue.rb:83:in `perform_action''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
base.rb:435:in `send''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
base.rb:435:in `process_without_filters''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
filters.rb:684:in `process_without_session_management_support''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
session_management.rb:114:in `process''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
base.rb:334:in `process''
/usr/lib/ruby/gems/1.8/gems/rails-1.2.5/lib/dispatcher.rb:41:in
`dispatch''
/usr/lib/ruby/gems/1.8/gems/rails-1.2.5/lib/webrick_server.rb:113:in
`handle_dispatch''
/usr/lib/ruby/gems/1.8/gems/rails-1.2.5/lib/webrick_server.rb:79:in
`service''
/usr/lib/ruby/1.8/webrick/httpserver.rb:104:in `service''
/usr/lib/ruby/1.8/webrick/httpserver.rb:65:in `run''
/usr/lib/ruby/1.8/webrick/server.rb:173:in `start_thread''
/usr/lib/ruby/1.8/webrick/server.rb:162:in `start''
/usr/lib/ruby/1.8/webrick/server.rb:162:in `start_thread''
/usr/lib/ruby/1.8/webrick/server.rb:95:in `start''
/usr/lib/ruby/1.8/webrick/server.rb:92:in `each''
/usr/lib/ruby/1.8/webrick/server.rb:92:in `start''
/usr/lib/ruby/1.8/webrick/server.rb:23:in `start''
/usr/lib/ruby/1.8/webrick/server.rb:82:in `start''
/usr/lib/ruby/gems/1.8/gems/rails-1.2.5/lib/webrick_server.rb:63:in
`dispatch''
/usr/lib/ruby/gems/1.8/gems/rails-1.2.5/lib/commands/servers/webrick.rb:59
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`gem_original_require''
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require''
/usr/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_support/
dependencies.rb:495:in `require''
/usr/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_support/
dependencies.rb:342:in `new_constants_in''
/usr/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_support/
dependencies.rb:495:in `require''
/usr/lib/ruby/gems/1.8/gems/rails-1.2.5/lib/commands/server.rb:39
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`gem_original_require''
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require''
script/server:3
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/
base.rb:1238:in `method_missing''
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/
associations/has_many_through_association.rb:120:in `send''
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/
associations/has_many_through_association.rb:120:in `method_missing''
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/
base.rb:946:in `with_scope''
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/
associations/has_many_through_association.rb:120:in `method_missing''
/home/thufir/Desktop/strawr/app/controllers/feeds_controller.rb:88:in
`add_some_tags''
/home/thufir/Desktop/strawr/app/controllers/feeds_controller.rb:87:in
`each''
/home/thufir/Desktop/strawr/app/controllers/feeds_controller.rb:87:in
`add_some_tags''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
base.rb:1101:in `send''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
base.rb:1101:in `perform_action_without_filters''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
filters.rb:696:in `call_filters''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
filters.rb:688:in `perform_action_without_benchmark''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
benchmarking.rb:66:in `perform_action_without_rescue''
/usr/lib/ruby/1.8/benchmark.rb:293:in `measure''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
benchmarking.rb:66:in `perform_action_without_rescue''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
rescue.rb:83:in `perform_action''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
base.rb:435:in `send''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
base.rb:435:in `process_without_filters''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
filters.rb:684:in `process_without_session_management_support''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
session_management.rb:114:in `process''
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/
base.rb:334:in `process''
/usr/lib/ruby/gems/1.8/gems/rails-1.2.5/lib/dispatcher.rb:41:in
`dispatch''
/usr/lib/ruby/gems/1.8/gems/rails-1.2.5/lib/webrick_server.rb:113:in
`handle_dispatch''
/usr/lib/ruby/gems/1.8/gems/rails-1.2.5/lib/webrick_server.rb:79:in
`service''
/usr/lib/ruby/1.8/webrick/httpserver.rb:104:in `service''
/usr/lib/ruby/1.8/webrick/httpserver.rb:65:in `run''
/usr/lib/ruby/1.8/webrick/server.rb:173:in `start_thread''
/usr/lib/ruby/1.8/webrick/server.rb:162:in `start''
/usr/lib/ruby/1.8/webrick/server.rb:162:in `start_thread''
/usr/lib/ruby/1.8/webrick/server.rb:95:in `start''
/usr/lib/ruby/1.8/webrick/server.rb:92:in `each''
/usr/lib/ruby/1.8/webrick/server.rb:92:in `start''
/usr/lib/ruby/1.8/webrick/server.rb:23:in `start''
/usr/lib/ruby/1.8/webrick/server.rb:82:in `start''
/usr/lib/ruby/gems/1.8/gems/rails-1.2.5/lib/webrick_server.rb:63:in
`dispatch''
/usr/lib/ruby/gems/1.8/gems/rails-1.2.5/lib/commands/servers/webrick.rb:59
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`gem_original_require''
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require''
/usr/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_support/
dependencies.rb:495:in `require''
/usr/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_support/
dependencies.rb:342:in `new_constants_in''
/usr/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_support/
dependencies.rb:495:in `require''
/usr/lib/ruby/gems/1.8/gems/rails-1.2.5/lib/commands/server.rb:39
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`gem_original_require''
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require''
script/server:3
Request
Parameters: {"tag1"=>{"checked"=>"0"},
"commit"=>"Save changes", "tag2"=>
{"checked"=>"0"},
"tag3"=>{"checked"=>"1"},
"id"=>"4"}
Show session dump
---
flash: !map:ActionController::Flash::FlashHash {}
Response
Headers: {"cookie"=>[],
"Cache-Control"=>"no-cache"}
The relevant code:
thufir@arrakis ~/Desktop/strawr $
thufir@arrakis ~/Desktop/strawr $ cat app/controllers/feeds_controller.rb
class FeedsController < ApplicationController
def index
list
render :action => ''list''
end
# GETs should be safe (see http://www.w3.org/2001/tag/doc/
whenToUseGet.html)
verify :method => :post, :only => [ :destroy, :create, :update ],
:redirect_to => { :action => :list }
def list
@feed_pages, @feeds = paginate :feeds, :per_page => 10
end
def show
@feed = Feed.find(params[:id])
end
def new
@feed = Feed.new
@tag = Tag.find_all
end
def create
@feed = Feed.new(params[:feed])
if @feed.save
flash[:notice] = ''Feed was successfully created.''
redirect_to :action => ''list''
else
render :action => ''new''
end
end
def edit
@feed = Feed.find(params[:id])
@tag = Tag.find_all
end
def update
@feed = Feed.find(params[:id])
if @feed.update_attributes(params[:feed])
flash[:notice] = ''Feed was successfully updated.''
redirect_to :action => ''show'', :id => @feed
else
render :action => ''edit''
end
end
def destroy
Feed.find(params[:id]).destroy
redirect_to :action => ''list''
end
#courtesy of Listing 12-12
#of Ruby on Rails For Dummies
def remove_tag
@feed = Feed.find(params[:id])
@feed.tags.delete(
Tag.find(params[:which_tag]))
if @feed.save
flash[:notice] = ''Tag has been removed.''
end
redirect_to :action => ''show'', :id => @feed
end
def add_tag
@feed = Feed.find(params[:id])
@feed.tags.push_with_attributes(
Tag.find(params[:tag][:id]))
if @feed.save
flash[:notice] = ''Tag has been added!''
end
redirect_to :action => ''show'', :id => params[:id]
end
def add_some_tags
@feed = Feed.find(params[:id])
@unused_tags Tag.find(:all) - @feed.tags
if @unused_tags.any?
@tags_to_add = @unused_tags.select { |tag|
(@params[''tag''+tag.id.to_s][''checked'']
== ''1'')}
@tags_to_add.each { |tag|
@feed.tags.push_with_attributes(tag)}
end
if @tags_to_add.any? and @feed.save
flash[:notice] = ''Tags have been added!''
end
redirect_to :action => ''show'', :id => @feed
end
end
thufir@arrakis ~/Desktop/strawr $
thufir@arrakis ~/Desktop/strawr $ cat app/views/feeds/show.rhtml
<% for column in Feed.content_columns %>
<p>
<b><%= column.human_name %>:</b> <%=h
@feed.send(column.name) %>
</p>
<% end %>
<%= link_to ''Edit'', :action => ''edit'',
:id => @feed %> |
<%= link_to ''Back'', :action => ''list''
%>
<% for column in Feed.content_columns %>
<p>
<b><%= column.human_name %>:</b>
<%=h @feed.send(column.name) %>
</p>
<% end %>
<b>Tags:</b><br>
<% if @feed.tags.empty? %>
(None)<p>
<% else %>
<% for tag in @feed.tags %>
<%= tag.name %>
<%= link_to ''Remove'', { :action =>
''remove_tag'',
:id => @feed, :which_tag => tag.id },
:confirm => ''Are you sure?'', :post => true %>
<br />
<% end %>
<% end %>
<% @unused_tags Tag.find(:all) - @feed.tags %>
<% if @unused_tags.any? %>
<%= form_tag :action => "add_some_tags",
:id => @feed %>
<b>Add a tag:</b><br>
<% @unused_tags.each {|tag| %>
<%= check_box(''tag''+tag.id.to_s,
''checked'') +
tag.tag %><br/>
<% } %>
<%= submit_tag %>
<%= end_form_tag %>
<% end %><p>
<%= link_to ''Edit'', :action => ''edit'',
:id => @feed %> |
<%= link_to ''Back'', :action => ''list''
%>
thufir@arrakis ~/Desktop/strawr $
thanks,
Thufir
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---