私は ruby と rails に不慣れで、コーディングの標準と規則にできる限り従いたいので、悪い習慣を身につけないようにしています。Course と Location の 2 つのモデルがあります。コースは 1 つの場所にのみ属することができるため、コースは場所に属します。場所は複数のコースで共有される可能性があるため、場所には多くのコースがあります。
コースを作成するとき、その ID で見つかったロケーションがすでに存在している場合があります。または、ロケーションがまだ存在しない可能性があります。その場合、新しいロケーション レコードを作成する必要があります。私の Course コントローラーには、次の作成アクションがあります。
def create
@course = Course.new(params[:course])
if params[:course][:location][:id].blank?
@course.location = Location.create(params[:course][:location])
else
@course.location = Location.find_by_id(params[:course][:location][:id])
end
@course.save
respond_with @course
end
これは、JSON でのみ応答する REST API であることに注意してください。リクエストを作成する JavaScript は、GET リクエストによって返されるのと同じ形式で JSON 配列をポストします。
{
"course":
{
"title":"US History",
"credits":"3",
"max_students":"100",
"location":
{
"id":"",
"building":"Freedom Hall",
"room":"301"
}
}
}
or
{
"course":
{
"title":"US History",
"credits":"3",
"max_students":"100",
"location":
{
"id":"12", # this is the only difference
"building":"Freedom Hall",
"room":"301"
}
}
}
- 私が読んだすべての例と比べると、このコードはそれほどエレガントに見えません。それを因数分解するより良い方法はありますか?
- Location.create で例外が発生した場合、@course.save は引き続き呼び出されますか? Location.create! を使用する必要がありますか?
- 同様に、エラーが Location モデルにあったとしても、検証エラーは @course.errors で終了しますか? エラーをクライアントに返すことができるように、例外からレスキューする必要がありますか?
いろいろと助けてくれてありがとう!