/ /「if @ record.save」という行はどのようにレコードを保存しますか。 - ルビーオンレール、ルビー

レコード "if @ record.save"はどのようにレコードを保存しますか? - ルビー・オン・レール、ルビー

私は「レコードを作成して保存するには、実行しなければならないという印象を常に受け​​てきました。 record.new そして record.save、または record.create.

このコードでレコードがどのように保存されるのか理解できたことはありません。

def create
@record = Record.new(record_params)
if @record.save
#do stuff
end
end

私は if 行とレコードが保存されなくなりました。私は思った if ステートメントは条件をテストしたばかりですか、それともアクションを実行することもできますか?

回答:

回答№1は2

方法 save メソッドが呼び出された後にtrueまたはfalseを返します。 ステップ1、モデルは保存しようとします。保存した場合はレコードを保存し、ステップ2の場合はtrueを返します。保存されない場合、メソッドはfalseを返します。あなたのifステートメントは、それぞれの状況に対して何をすべきかを制御します。

if @model.save
end

回答№2の場合は3

私はステートメントが条件をテストしただけなのか、それとも実行できるのかと思いました アクションも?

Rubyでは、式の評価は真偽値または偽の値を返します。 関係ない式そのものは何ですか。

式は偽になります 排他的に どちらかを返す場合 nil または falseそうでなければそれは真実です。

だから、あなたのケースに戻って、 ActiveRecord :: Persistance#save 返品 true レコードが正常に保存された場合は、それ以外の場合は false.


答え№3の2

Rubyで if trueまたはfalseを返す式です(すべてが式です)。そして他の言語と同じように if または else または elsif ブロックが実行されます。

(レコードをデータベースに保存するような)副作用のある式に述語を置くと、もちろん副作用が適用されます。これはほとんどのプログラミング言語に当てはまります。

def foo
print "Hello "
true
end

if foo
print "world!"
end

回答№4の場合は1

Ruby(および他の多くの言語) if ステートメントは条件をテストします。しかし、条件をテストするには、条件内のコードを評価する必要があります。つまり、実行します。

それで、それはどのようにしていますか。 if 文が実行されます @record.save, save メソッドは保存しようとします @record 返品 true それがうまくいけば。レコードを保存できない場合は false.

その後、 if 結果をチェックします(true または false)。 @record その時点ですでに保存は実行されています。


回答№5の場合は0

ここに @record.save レコードを保存してどちらかを返します true または false

そしてその値は以下によって評価されます。 if

通常あなたが上でいくつかの行動をしたいときにこれを使うでしょう success または failure 保存されているレコードの