對於我的申請,我有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」,它現在就起作用了。
謝謝,解決了!我更新了我的問題以表明我做了什麼。 – spl 2013-05-10 14:42:09