再次回到初学者的布尔方法定义问题。
这是我想写的方法:
def has_booth?
end
我不太确定要传递什么作为参数。我希望这对于已创建展位的用户返回true,对于那些没有创建展位的用户则返回false。展位与用户ID相关联,每个用户都可以拥有一个展位。展位还有一个名称参数。
我尝试过像
这样的事情booth.id.nil?
和
booth_id.nil?
和
booth.name.nil?
和
booth.name != nil
和
if current_user
if session[:booth_id]
你能指导一下我做错了什么或指向一些文献吗?我已经看过一堆教程,用于创建简单的方法,这些方法具有简单的参数并返回或将某些东西放在屏幕上,但似乎没有任何东西可以帮助我解决问题。我想尽可能正确地做到这一点。
如果有帮助,这是我的摊位控制员:
class BoothsController < ApplicationController
before_action :logged_in_user
def index
@booths = Booth.all
end
def new
@booth = Booth.new
end
def create
@booth = current_user.build_booth(booth_params)
if @booth.save
flash[:success] = "Congrats on opening your booth!"
redirect_to root_url
else
render 'new'
end
end
def show
@user = User.find(params[:id])
@booth = Booth.find(params[:id])
end
private
def booth_params
params.require(:booth).permit(:name)
end
end
我感谢任何有关解决方案的帮助或指导。谢谢!
答案 0 :(得分:1)
您可以使用exists?
方法:
Booth.exists?(user_id: id) # Return true if exists a Booth with user_id == id
您的方法将如下所示:
def has_booth?(user_id)
Booth.exists?(user_id: user_id)
end
虽然,您应该将该方法放在User
模型中:
class User < ActiveRecord::Base
has_one :booth
def booth? # It's convention booth? instead of has_booth?
!!self.booth
end
end
然后在您的观看中,您可以在用户上调用该方法:
<% if current_user.booth? %> ...