Rails - 在帖子上发表评论 - NoMethodError

时间:2013-05-10 03:29:48

标签: ruby-on-rails

对于我的申请,我有Users,可以创建Project过帐。在每个项目发布中,他们可以发表我已制作Blogupdate模型的评论。我希望用户能够喜欢在每个项目页面上制作的Blogupdates。

所以,我创建了一个Bloglike模型。但是当我尝试渲染LIKE / UNLIKE按钮时,我收到以下错误:

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控制器中的实际创建/销毁功能构建控制器;但是看下面的附加代码,有人知道我如何解决这个错误,所以like / unfollow按钮呈现?

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>

更新:如下所述@Dan,我忘了更新routes.rb文件。我添加了“资源:博客”,现在已经有效了。

1 个答案:

答案 0 :(得分:2)

您没有发布您的routes.rb文件,但我打赌这就是问题所在。与路线相关的未定义方法(例如bloglikes_path)通常表示您尚未定义路线。

resources :bloglikes添加到项目的routes.rb文件中,看看是否能解决问题。