Ruby on rails 如果用户没有';你还没有提交评论吗?

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

嗨,我是一个超级初学者,正在开发我的第一个应用程序,我有一个场馆表,用户可以添加对场馆的评论。我想能够隐藏审查表,一旦用户提交了审查,以阻止他们提交更多

这就是我现在拥有的:

在场馆展示页面添加评审表

但它给出了错误的未定义方法“has#u review”

模式

一个场地有很多评论

用户有很多评论

评论属于用户和场所

路线如下所示:

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