Ruby on rails 如果用户没有';你还没有提交评论吗?
嗨,我是一个超级初学者,正在开发我的第一个应用程序,我有一个场馆表,用户可以添加对场馆的评论。我想能够隐藏审查表,一旦用户提交了审查,以阻止他们提交更多 这就是我现在拥有的: 在场馆展示页面添加评审表 但它给出了错误的未定义方法“has#u review” 模式 一个场地有很多评论 用户有很多评论 评论属于用户和场所 路线如下所示:Ruby on rails 如果用户没有';你还没有提交评论吗?,ruby-on-rails,forms,activerecord,show-hide,Ruby On Rails,Forms,Activerecord,Show Hide,嗨,我是一个超级初学者,正在开发我的第一个应用程序,我有一个场馆表,用户可以添加对场馆的评论。我想能够隐藏审查表,一旦用户提交了审查,以阻止他们提交更多 这就是我现在拥有的: 在场馆展示页面添加评审表 但它给出了错误的未定义方法“has#u review” 模式 一个场地有很多评论 用户有很多评论 评论属于用户和场所 路线如下所示: App::Application.routes.draw do resources :sessions resources :users resour
App::Application.routes.draw do
resources :sessions
resources :users
resources :venues do
resources :reviews
end
end
[...]
假定您按照Wes的建议进行了更改,review?
方法将查看数据库,查看该用户是否进行了审阅
审查表需要为进行审查的用户及其审查的地点设置一列
所以代码看起来像这样
编辑以反映最近添加的架构
在控制器中
def reviewed?
if current_user
@current_user.has_reviewed(@venue.id)
else
nil
end
end
在用户模型中
class User < ...
has_many :reviews
def has_reviewed(venueid)
reviews.exists?(:venue_id => venueid)
end
...
end
类用户<。。。
有很多评论吗
def已审核(venueid)
评论。是否存在?(:场馆id=>venueid)
结束
...
结束
基本上,我认为has_review在用户模型中更好,因为用户有很多评论,然后它可以检查用户是否评论了给定的场地。
我假设模型评审有一个场馆外键,称为场馆id,因为评审属于某个场馆,这是标准的事情。has\u revied方法可以是一行,如:
!查看。其中(:user\u id=>user,:vention\u id=>vention)。空白?
或者更好Review.exists?(['user\u id=?AND vention\u id=?',user.id,vention.id]
@Jim Morris感谢你的回答,它帮助我更好地理解了。Review?助手给了我这个错误,尽管“为nil调用id,这会错误地为4——如果你真的想要nil的id,请使用object\u id”这会是什么?谢谢again@Dave这意味着@current_user为nil或@venue为nil,请记住,在调用帮助程序之前,您需要确保这两个参数都已设置。另外,从def current_user
的外观来看,如果用户不存在,它将返回nil,因此您需要涵盖这种情况,您将has_review?方法?Ca放在何处你能把这个问题加进去吗?
class ApplicationController < ActionController::Base
helper :all # include all helpers, all the time
protect_from_forgery # See ActionController::RequestForgeryProtection for details
helper_method :current_user
helper_method :has_reviewed
helper_method :reviewed?
protected
def reviewed?
Review.has_reviewed(@current_user.id, venue.id)
end
def has_reviewed
!Review.where(:user_id=>user,:venue_id=>venue).blank?
end
private
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
end
def reviewed?
if current_user
Review.has_reviewed(@current_user.id, @venue.id)
else
nil
end
end
App::Application.routes.draw do
resources :sessions
resources :users
resources :venues do
resources :reviews
end
end
<% unless reviewed? %>
[...]
<% end %>
def reviewed?
if current_user
@current_user.has_reviewed(@venue.id)
else
nil
end
end
class User < ...
has_many :reviews
def has_reviewed(venueid)
reviews.exists?(:venue_id => venueid)
end
...
end