例如,有没有办法做这样的事情?
# IN CONTROLLER
if Tweet.find(params[:id])
@tweet = this
# instead of writing
# @tweet = Tweet.find(params[:id])
else
@tweet = Tweet.new(tweet_params)
end
答案 0 :(得分:6)
cmd.exe
如果找不到记录, @tweet = Tweet.find_by(id: params[:id]) || Tweet.new(tweet_params)
将返回find_by
。如果nil
为零,params[:id]
也将返回find_by
。
答案 1 :(得分:1)
不是那么多。 Dondi Michael Stroma回答的另一种方法是捕捉异常:
def show
@tweet = Tweet.find(params[:id])
rescue ActiveRecord::RecordNotFound
@tweet = Tweet.new(tweet_params)
end
或有点间接:
def show
@tweet = find_or_new_tweet
end
private
def find_or_new_tweet # or whatever
@tweet = Tweet.find(params[:id])
rescue ActiveRecord::RecordNotFound
@tweet = Tweet.new(tweet_params)
end
答案 2 :(得分:0)
您必须将推文分配给变量:
if @tweet = Tweet.find(params[:id])
@tweet.method
else
@tweet = Tweet.new(tweet_params)
end
答案 3 :(得分:0)
可以是一行:
@tweet = Tweet.find_by(id: params[:id]) || Tweet.new(tweet_params)