質問

map.resourcesを使用してRailsに安静なルートを作成すると、新規、作成、編集、更新のアクションが生成されるのはなぜだろうと思っていましたか? 作成更新のアクションを1つだけ宣言するのに問題はありますか そして、このようなことをしますか?

def create
  unless post?
     @user = User.new
  else
     redirect_to :action => 'index' if user.create(params[:user])
  end
end

したがって、次のようなものを作成できます

:GET  users/create # to show the form (same as action - new)
:POST users/create # to create a new user

Restfulは動詞に基づいているため、これが使用するのに最適なアプローチではありませんか?

ご清聴ありがとうございました

役に立ちましたか?

解決

ここには、2つの関連するが明確な問題があると思います。公開されるURLと、ルーティング先のコントローラーメソッドです。これらのいずれかを独立して変更できるため、個別に対処します。また、Railsのコンテキストで実装されているRESTについて、少しおおまかに、厳密に説明することに注意してください。

外部URLに関しては、システムのAPIを構成するURL(:GET users / 1 :PUT users / 1 など)と、Webブラウザを使用する人間にとって便利なURL( users / new users / 5 / edit など)。 APIは、リソースを取得するか、何らかの方法でリソースとやり取りすることです-これらは、システムとやり取りするときに別のコンピューターが使用するURLです。これらのURLは通常、やり取りしたいリソースのアドレスであり、HTTPメソッドとパラメーターを使用して、何をしたいかを示します(GET =このリソースを表示、PUT =このリソースを変更など) )。便利なURLは、人間がAPIを使いやすくするためのフォームを表示するためにあります。 curlを使用してユーザーを編集し、変更するすべてのパラメーターを手動で入力し、users / 1にPOSTを実行することでできますが、フォームを使用できる場合は人間としてはるかに簡単です。

上記の例を見ると、:GET users / create は理にかなっているかもしれません(デフォルトの:GET users / new によく似ています) 、しかし:POST users / create は大まかに" usersの新しいものを作成/ create"に変換しますが、これはあまり意味がありません。

コントローラーのメソッドに関する限り、「新規」はおよび「作成」前の段落から明らかになるように、根本的に異なるタスクを実行しています。 1つはフォームを表示し、もう1つは新しいリソースを作成しています。もちろん、これを行うために同じメソッドをオーバーロードすることはできますが、やむを得ない理由がなければ、2つの小さな独立したメソッドを作成して2つの小さな独立したタスクを処理する方がおそらくより自然なアプローチです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top