检查模型实例是否已存在某些参数

时间:2014-04-06 23:58:23

标签: ruby-on-rails ruby-on-rails-4 model exists database-relations

在我的应用程序中,我想检查一下音乐会模型是否存在与评论模型相同的艺术家和日期字段。如果它确实我想将评论添加到音乐会,如果没有,那么我想创建一个新的音乐会和评论,因为音乐会has_many评论和评论belongs_to音乐会......

所以我写了一个存在?我的演唱会控制器中的功能:

def exists(@artist, @date)?
    @concert_exists = @concerts.find_by_artist_and_date(artist: @artist, date: @date)
    if @concert_exists.nil?
        return false
    else
        return true
    end
  end

然后在我的评论控制器中,我尝试为其创建功能执行此操作:

def create

    if Concert.exists(review_params[:artist], review_params[:date])?
      #add review to this concert 
    else
      @concert = Concert.create(:artist => "artist", :venue => "venue", :date => "2014-2-2")
      @review = @concert.reviews.create(review_params) 
      @concert.artist = @review.artist
      @concert.venue = @review.venue
      @concert.date = @review.date
      @concert.save
    end
end

我一直收到错误消息

  

"语法错误,意外的keyword_else"

我的实施是否不正确,是否有更简单的方法来做我尝试的事情?

2 个答案:

答案 0 :(得分:1)

Rails已经有一种方法可以为你做find_or_create_by,所以你不需要重新发明轮子

@concert = Concert.find_or_create_by(artist: @artist, venue: "venue", date: @date)
@concert.reviews.create(review_params)

答案 1 :(得分:0)

我想你想写:

def exists?(@artist, @date)

if Concert.exists?(review_params[:artist], review_params[:date])

更改问号的位置。