2013-05-10 69 views
0

對於我的申請,我有Users,誰可以創建Project張貼。在每個項目發佈時,他們可以發表評論,我已製作Blogupdate模型。我希望用戶能夠喜歡每個項目頁面上的Blogupdates。Rails - 喜歡在帖子上發表評論 - NoMethodError

所以,我創建了一個Bloglike模型。但是,當我嘗試呈現一個頂/取消按鈕,我收到以下錯誤:

NoMethodError in Projects#blogs 
undefined method `bloglikes_path' 
Extracted source (around line #11): 
11:  <%= form_for(current_user.bloglikes.build(blogupdate_id: blogupdate.id)) do |f| %> 

問:作爲一個說明,我還沒有建立起來的控制器爲實際創建/銷燬功能在我bloglikes控制器;但看看我下面的附加代碼,有人知道我可以如何解決這個錯誤,所以喜歡/取消關注按鈕呈現?

schema.rb

create_table "bloglikes", :force => true do |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 

視圖/項目/ blogs.html.erb

<%= render 'blogs' %> 

視圖/項目/ _blogs。 html.erb

<%= render @blogupdates %> 

的意見/ 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 }) do |f| %> 
    <%= f.submit "UNLIKE", class: "btn btn-medium" %> 
    <% end %> 
<% else %> 
    <%= form_for(current_user.bloglikes.build(blogupdate_id: blogupdate.id)) do |f| %> 
     <div><%= f.hidden_field :blogupdate_id %></div> 
     <%= f.submit "LIKE", class: "btn btn-medium btn-primary" %> 
    <% end %> 
<% end %> 

<p><%= raw blogupdate.content %></p> 

更新:由於@丹下面提到的,我忘了更新的routes.rb文件。我添加了「資源:bloglikes」,它現在就起作用了。

回答

2

您沒有發佈您的routes.rb文件,但我會打賭,這是問題所在。與路線相關的未定義方法(例如bloglikes_path)通常表示您尚未定義路線。

將​​添加到您項目的routes.rb文件中,看看是否可以解決問題。

+0

謝謝,解決了!我更新了我的問題以表明我做了什麼。 – spl 2013-05-10 14:42:09