Rails - Liking Comments Made on Posts - NoMethodError -
for application, have users
, can create project
postings. on each project posting, can make comments have made blogupdate
model. want users able blogupdates made on each project page.
so, created bloglike model. when try render like/unlike button, following error:
nomethoderror in projects#blogs undefined method `bloglikes_path' extracted source (around line #11): 11: <%= form_for(current_user.bloglikes.build(blogupdate_id: blogupdate.id)) |f| %>
question: note, have not built controller actual create/destroy function in bloglikes controller; looking @ attached code below, know how can resolve error like/unfollow button renders?
schema.rb
create_table "bloglikes", :force => true |t| t.integer "user_id" t.integer "blogupdate_id" t.datetime "created_at", :null => false t.datetime "updated_at", :null => false end add_index "bloglikes", ["blogupdate_id"], :name => "index_bloglikes_on_blogupdate_id" add_index "bloglikes", ["user_id", "blogupdate_id"], :name => "index_bloglikes_on_user_id_and_blogupdate_id", :unique => true add_index "bloglikes", ["user_id"], :name => "index_bloglikes_on_user_id"
user.rb
has_many :bloglikes, foreign_key: "user_id" has_many :liked_blogupdates, through: :bloglikes, source: :blogupdate
blogupdate.rb
has_many :bloglikes, foreign_key: "blogupdate_id" has_many :liked_by, through: :bloglikes, source: :user def liking_blogupdate?(blogupdate) bloglikes.find_by_blogupdate_id(blogupdate.id) end def like_blogupdate!(blogupdate) bloglikes.create!(blogupdate_id: blogupdate.id) end def blogupdate_unlike!(blogupdate) bloglikes.find_by_blogupdate_id(blogupdate.id).destroy end
bloglike.rb
class bloglike < activerecord::base attr_accessible :blogupdate_id belongs_to :user, foreign_key: "user_id" belongs_to :blogupdate, foreign_key: "blogupdate_id" end
projects_controller.rb
def blogs @project = project.find(params[:id]) @blogupdates = @project.blogupdates.newest.page(params[:blogupdates_page]).per_page(5) end
views/projects/blogs.html.erb
<%= render 'blogs' %>
views/projects/_blogs.html.erb
<%= render @blogupdates %>
views/blogupdates/_blogupdates.html.erb
<%= blogupdate.liked_by.count %> <% if current_user.liking_blogupdate?(blogupdate) %> <%= form_for(current_user.bloglikes.find_by_blogupdate_id(blogupdate), html: { method: :delete }) |f| %> <%= f.submit "unlike", class: "btn btn-medium" %> <% end %> <% else %> <%= form_for(current_user.bloglikes.build(blogupdate_id: blogupdate.id)) |f| %> <div><%= f.hidden_field :blogupdate_id %></div> <%= f.submit "like", class: "btn btn-medium btn-primary" %> <% end %> <% end %> <p><%= raw blogupdate.content %></p>
update: noted below @dan, forgot update routes.rb file. added "resources :bloglikes" , worked now.
you didn't post routes.rb
file i'd wager problem at. undefined method related routes (e.g. bloglikes_path
) typically indicates you've not defined routes.
add resources :bloglikes
project's routes.rb
file , see if resolves issue.
Comments
Post a Comment