【发布时间】:2015-02-17 19:40:10
【问题描述】:
我无法解决这个问题。我不断收到同样的错误: ActionView::Template::Error(nil:NilClass 的未定义方法 `id'):
这是我喜欢的控制器:
class LikesController < ApplicationController
def new
@bookmark = Bookmark.find(params[:bookmark_id])
@like = Like.new
end
def create
@bookmark = Bookmark.find(params[:bookmark_id])
# @like = Like.new
# @like.user = current_user
# @like.bookmark = @bookmark
@like = current_user.likes.build(bookmark: @bookmark)
if @like.save
flash[:notice] = "Bookmark was Liked!"
redirect_to @bookmark
else
flash[:error] = "Unable to Like Bookmark"
redirect_to @bookmark
end
end
def destroy
#@bookmark = Bookmark.find(params[:bookmark_id])
@like = @bookmark.likes.find(params[:id])
if @like.destroy
flash[:notice] = "Bookmark was Un-liked."
redirect_to @bookmark
else
flash[:error] = "Error Un-liking bookmark."
redirect_to @bookmark
end
end
end
我的用户模型:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
has_many :topics
has_many :bookmarks
has_many :likes, dependent: :destroy
def liked(bookmark)
likes.where(bookmark: bookmark.id).first
end
end
我喜欢的部分:
<div>
<% if like = current_user.liked(bookmark) %>
<%= link_to [@topic, bookmark, like], class: 'btn btn-danger', method: :delete do %>
<i class="glyphicon glyphicon-star-empty"> </i> Unlike
<% end %>
<% else %>
<%= link_to [@topic, bookmark, Like.new], class: 'btn btn-primary', method: :post do %>
<i class="glyphicon glyphicon-star"> </i> Like
<% end %>
<% end %>
</div>
如果我需要显示其他内容,请告诉我,感谢您的帮助
【问题讨论】:
-
哪个操作给了您错误?错误指向哪一行?
-
错误指向:
<div> <% if like = current_user.liked(bookmark) %> <%= link_to [@topic, bookmark, like], class: 'btn btn-danger', method: :delete do %> <i class="glyphicon glyphicon-star-empty"> </i>&nbsp; Unlike <% end %> -
具体到
<% if like = current_user.liked(bookmark) %>这一行 -
在我的rails控制台中,如果我拉出一个书签,它看起来像这样:
=> #<Bookmark id: 1, url: "http://localhost:3000/topics/11/bookmarks/new", topi c_id: 11, created_at: "2015-02-17 19:28:17", updated_at: "2015-02-17 19:28:17", user_id: 1, bookmark_id: nil> 2.0.0-p481 :003 >所以开头有一个书签ID,但对于书签ID它仍然显示为nil?跨度> -
尝试将
users.rb中的liked函数更改为Like.where(bookmark: bookmark.id).first
标签: ruby-on-rails