2013-05-10 68 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