定义布尔方法Ruby初学者

时间:2014-11-10 18:13:30

标签: ruby-on-rails-4 boolean

再次回到初学者的布尔方法定义问题。

这是我想写的方法:

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

我感谢任何有关解决方案的帮助或指导。谢谢!

1 个答案:

答案 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? %> ...